Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pivot Tabel MySQL dengan Kolom Dinamis

Saya rasa month_payment Anda kolom adalah DATE (btw, sebaiknya posting SHOW CREATE TABLE ketika Anda mengajukan pertanyaan SQL sehingga kami tidak perlu menebak).

Tetapi kueri pertama Anda tidak memformatnya ke tahun/bulan. Juga tidak membatasi rentang tanggal.

SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM month_payment) = ',
      EXTRACT(YEAR_MONTH FROM month_payment),
      ' THEN AMOUNT END) AS `',
      EXTRACT(YEAR_MONTH FROM month_payment),
      '`'
    )
  ) INTO @sql
FROM record_payment
WHERE month_payment BETWEEN ? AND ?

Lihat https://dev. mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_extract

Terlepas dari saran Barmar, tidak ada alasan untuk memasukkan ini ke dalam prosedur tersimpan. Anda menandai pertanyaan Anda dengan PHP, dan Anda dapat melakukannya dengan PHP dengan baik:

<?php

...get a PDO connection...

$sql = "
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'SUM(CASE WHEN EXTRACT(YEAR_MONTH FROM month_payment) = ',
          EXTRACT(YEAR_MONTH FROM month_payment),
          ' THEN AMOUNT END) AS `',
          EXTRACT(YEAR_MONTH FROM month_payment),
          '`'
        )
      ) AS `pivot_columns`
    FROM record_payment
    WHERE month_payment BETWEEN ? AND ?
";
$stmt = $pdo->prepare($sql);
$date_from = '2017-01-01';
$date_to   = '2017-08-01';
$stmt->execute([$date_from, $date_to]);
$row = $stmt->fetch();
$stmt->closeCursor();
$pivot_columns = $row['pivot_columns'];

$sql = "
    SELECT title AS `Payment Method`, {$pivot_columns}
    FROM record_payment t1
    JOIN setting_payment_method spm ON spm.id = t1.method_id
    WHERE month_payment BETWEEN ? AND ?
    GROUP BY title WITH ROLLUP
";
echo $sql;
$stmt = $pdo->prepare($sql);
$stmt->execute([$date_from, $date_to]);
$results = $stmt->fetchAll();
$stmt->closeCursor();

print_r($results);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memanfaatkan kekuatan cluster dalam konteks database?

  2. Daftar metakarakter untuk kurung siku regexp MySQL

  3. Instal MySQL di Mac

  4. validasi dan data ditambahkan ke tabel db

  5. Bungkus elemen array dalam div berdasarkan nilai yang sama