1

こんにちは、よろしくお願いします。

以前のいくつかの質問を確認しましたが、この正確な状況を見つけることができませんでした。

行を列に転置/ピボットしようとしていますが、結果はwhere句の日付関数に基づいているため、selectが多少可変になっています。

選択する
DATE_FORMAT(packet_details.installDate、'%m-%d-%Y')as Install_Date、
Count(packet_details.installDate)
から
packet_details
どこ
 packet_details.installDate> = CURRENT_DATE-INTERVAL 7 DAY
 AND packet_details.installDate "* lessthan *" CURRENT_DATE + INTERVAL 7 DAY
GROUP BY installDate
*以下の記号はスタックに表示されません&私はそれを修正する方法がわかりません

それが理にかなっているかどうかわからないので、私はフィドルを含めました:http ://sqlfiddle.com/#!2/5b235/3/0 だから、このようなもの:

INSTALL_DATE COUNT
2013年1月24日2
2013年1月25日2
2013年1月26日2
2013年1月27日2
2013年1月28日2
2013年1月29日1
2013年2月3日1
2013年2月4日1
2013年2月5日5
2013年2月6日4

になって:

INSTALL_DATE 1/24/2013 1/25/2013 1/26/2013 1/27/20131/28/2013...。   
COUNT 2 2 2 2 2 1     
4

1 に答える 1

2
SELECT  Install_DATE,
        MAX(CASE WHEN Install_DATE = '01-24-2013' THEN totalCount END) `01-24-2013`,
        MAX(CASE WHEN Install_DATE = '01-25-2013' THEN totalCount END) `01-25-2013`,
        MAX(CASE WHEN Install_DATE = '01-26-2013' THEN totalCount END) `01-26-2013`,
        .......
FROM
(
  SELECT DATE_FORMAT(packet_details.installDate,'%m-%d-%Y') as Install_Date,
         Count(packet_details.installDate) totalCount
  FROM   packet_details
  WHERE  packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND 
         packet_details.installDate   < CURRENT_DATE + INTERVAL 7 DAY
  GROUP  BY installDate
) s

不明な数のInstall_Date場合は、動的クエリが非常に推奨されます。

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN Install_DATE = ''',
      Install_Date,
      ''' then totalCount end) AS `', Install_Date, '`' )
  ) INTO @sql
FROM 
(
  SELECT DATE_FORMAT(packet_details.installDate,'%m-%d-%Y') as Install_Date,
         Count(packet_details.installDate) totalCount
  FROM   packet_details
  WHERE  packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND 
         packet_details.installDate   < CURRENT_DATE + INTERVAL 7 DAY
  GROUP  BY installDate
) s;

SET @sql = CONCAT('SELECT Install_DATE, ', @sql, ' 
                    FROM
                    (
                      SELECT DATE_FORMAT(packet_details.installDate,''%m-%d-%Y'') as Install_Date,
                             Count(packet_details.installDate) totalCount
                      FROM   packet_details
                      WHERE  packet_details.installDate >= CURRENT_DATE - INTERVAL 7 DAY AND 
                             packet_details.installDate   < CURRENT_DATE + INTERVAL 7 DAY
                      GROUP  BY installDate
                    ) s');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
于 2013-01-31T06:28:47.567 に答える