Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

गतिशील स्तंभों के साथ MySQL तालिका को पिवट करें

मुझे लगता है कि आपका month_payment कॉलम एक DATE है (बीटीडब्ल्यू, पोस्ट करना चाहिए SHOW CREATE TABLE जब आप 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),
      '`'
    )
  ) INTO @sql
FROM record_payment
WHERE month_payment BETWEEN ? AND ?

देखें https://dev. mysql.com/doc/refman/5.7/hi/date-and-time-functions.html#function_extract

बरमार के सुझाव के बावजूद, इसे संग्रहीत प्रक्रिया में रखने का कोई कारण नहीं है। आपने अपने प्रश्न को PHP के साथ टैग किया है, और आप इसे PHP में ठीक कर सकते हैं:

<?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. WAMP/MySQL त्रुटियाँ सही भाषा में नहीं हैं

  2. PHP MySQL डेटाबेस में एकाधिक चेकबॉक्स और टेक्स्टबॉक्स सरणी डालने वाला है

  3. Mysql डीबी में बड़ी संख्या में संग्रहित करने में समस्या

  4. MySQL में टाइमज़ोन हैंडलिंग के लिए सबसे अच्छा अभ्यास क्या है?

  5. LAST_INSERT_ID () MySQL