2017-10-02 4 views
1

グラフを作成するためにSQLクエリからデータをフォーマットする際に助けが必要です。 これは以下のクエリです。グラフのSQLデータの再フォーマット

SELECT install_status, Date_appended , COUNT(serial_number) 
FROM Asset_Base 
Where (Date_appended = '2017-09-26' OR Date_appended = '2017-08-31' OR Date_appended = '2017-07-31') 
AND (install_status= 'Installed' 
OR (install_status= 'In Stock' AND u_install_sub_status = 'Available') 
OR install_status= 'Missing') 
Group By install_status , Date_appended 

返します

install_status Date_appended   (No column name) 
In Stock  2017-08-31 00:00:00.000 10981 
Installed  2017-08-31 00:00:00.000 58764 
Missing   2017-08-31 00:00:00.000 51661 
In Stock  2017-09-26 00:00:00.000 10830 
Installed  2017-09-26 00:00:00.000 59083 
Missing   2017-09-26 00:00:00.000 51209 

私はデータではなく、このように見てもらうことができます任意の方法はありますか?

Date_appended In Stock Installed Missing 
2017-08-31 10981 58764  51661 
2017-09-26 10830 59083  51209 

ありがとう!

+0

、ピボットを行うには、この1の読み取りを持っている... https://stackoverflow.com/questions/15931607/convert-rows-to-columns-using-pivot-in-sql-がありますサーバ – Alan

答えて

0

ちょうどこのことにより、Date_appendedだけグループごとに1行をしたい場合:

SELECT 
COUNT(CASE WHEN install_status = 'In Stock' THEN 1 END), 
... 

:あなただけinstall_statusIn Stock次を使用しているserial_numbersを数える列を持つようにしたい場合は

... 
GROUP BY appended; 

caseの式は、In Stock以外のすべての行をnullにマッピングします(句がcaseの暗黙のために) 。 countは一般にnullの値(ほとんどの集約関数のように)を無視します。

他の列も同様に追加できます。

ここでは、このピボット技術について詳しく読む:http://modern-sql.com/use-case/pivot

0

を、私はあなたがピボットを使用することだと思います。以下のクエリを参考にしてください:

 SELECT * FROM (
     select 'In Stock' as install_status, '2017-08-31' as Date_appended , 10981 as 'serial_number' 
     UNION ALL 
     select 'Installed' as install_status, '2017-08-31' as Date_appended , 58764 as 'serial_number' 
     UNION ALL 
     select 'Missing' as install_status, '2017-08-31' as Date_appended , 51661 as 'serial_number' 
     ) AS A 
     PIVOT 
     (
      MAX(serial_number) 
      For install_status in ([In Stock] ,[Installed],[Missing]) 
     ) PT 

RESULT : 
    Date_appended In Stock Installed Missing 
    ------------- ----------- ----------- ----------- 
    2017-08-31 10981  58764  51661 

    (1 row(s) affected) 
0

このクエリを使用できます。

SELECT * FROM 
    (SELECT install_status, serial_number , Date_appended FROM @Asset_Base 
     WHERE Date_appended IN ('2017-09-26', '2017-08-31', '2017-07-31') 
      AND (install_status IN ('Installed' , 'Missing') 
       OR (install_status= 'In Stock' AND u_install_sub_status = 'Available'))) SRC 
     PIVOT (COUNT(serial_number) FOR install_status IN ([In Stock], [Installed], [Missing])) PVT 
関連する問題