2016-05-28 7 views
0

私は3列のテーブルを持っています。最初の列は月数、2番目は会社の名前、3番目はその会社の不満の数です。 いくつかの企業では何ヶ月間も不満はなく、私はテーブルを生成したい、1軸は月軸、もう1軸は会社名で、テーブルの各セルの値は不満の数になる。結果を蓄積する「SQLのケースはいつですか?」

このSQLクエリの記述に私を助けてください。 おかげでこれは(ジェイソンの助けを借りて、それが動作し、かつnullを返しません。P.S. Numbのはフロートである、と苦情及びヶNVARCHARです)ピボットと私の試みである

select * 
from 
(
    select Numb, Complaint, Months 
    from Rezayat94 
) src 
pivot 
(
    sum(numb) 
    for months in ([1], [2], [3],[4],[5],[6], [7], [8],[9],[10],[11],[12]) 
) piv; 

。 :)

+0

ピボットテーブル – Jasen

+1

あなたの仕事のいくつかを投稿してください....このクエリを試しましたか?はいの場合はここにあなたの質問を投稿してください。 –

+0

@ジャセン私はピボットを試みたが、週のような言葉は予約語だと思われる。列名を変更する必要がありますか? –

答えて

0
for months in ([1], [2], [3],[4],[5],[6], [7], [8],[9],[10],[11],[12]) 

これは、値が "1"、 "2"、 "3"、あなたの列に格納されている場合にのみ動作します。列にnvarcharデータ型を指定しました。ですので、[1]、[2] ...などを月の列からの値で置き換えてください。

たとえば、あなたは2月 ...などを持っているので、これは

+0

ありがとう、それは働いた。 :) –

1

はこれを試してみてくださいするのに役立ちます。この

for months in ([Jan], [Feb],... , [Dec]) 

ような何か希望をお使いください。何か問題がある場合はお知らせください。

select Numb, 
     Complaint, 
     [1] AS Jan, 
     [2] as Feb, 
     [3] as Mar, 
     [4] as Apr, 
     [5] as May, 
     [6] as Jun, 
     [7] as Jul, 
     [8] as Aug, 
     [9] as Sep, 
     [10] as Oct, 
     [11] as Nov, 
     [12] as Dec 
from Rezayat94 
pivot 
(
    sum(numb) 
    for months in ([1], [2], [3],[4],[5],[6], [7], [8],[9],[10],[11],[12]) 
) piv; 
+0

OK。しかし、ユニコード文字はどうですか?私は何かを変えるべきですか? –

+1

@yousefyeganeあなたのご意見は明確ではありません。月の列はユニコード文字ですか?それが同じだとすれば –

+0

私はユニコード文字でN "を使用していましたが、ピボットにも必要かもしれないと思っていましたが、うまくいきました。 –

1

ピボットテーブルを使用する必要はありません。

DECLARE @COMPLAINTS TABLE ([MONTH] VARCHAR(3),COMPANY VARCHAR(1), NUMB FLOAT) 
INSERT INTO @COMPLAINTS 
VALUES 
('Jan','A',1), 
('Feb','A',2), 
('Mar','A',3), 
('Apr','A',4), 
('May','A',5), 
('Jun','A',6), 
('Jul','A',7), 
('Aug','A',8), 
('Sep','A',9), 
('Oct','A',10), 
('Nov','A',11), 
('Dec','A',12), 
('Jan','B',1), 
('Feb','B',2), 
('Mar','B',3), 
('Apr','B',4), 
('May','B',5), 
('Jun','B',6), 
('Jul','B',7), 
('Aug','B',8), 
('Sep','B',9), 
('Oct','B',10), 
('Nov','B',11), 
('Dec','B',12), 
('Jan','C',1), 
--('Feb','C',2), 
('Mar','C',3), 
--('Apr','C',4), 
('May','C',5), 
--('Jun','C',6), 
('Jul','C',7), 
--('Aug','C',8), 
('Sep','C',9), 
--('Oct','C',10), 
('Nov','C',11), 
('Dec','C',12) 

SELECT COMPANY Company, 
     sum(CASE WHEN [MONTH] = 'Jan' then numb else 0 end) as 'Jan', 
     sum(CASE WHEN [MONTH] = 'Feb' then numb else 0 end) as 'Feb', 
     sum(CASE WHEN [MONTH] = 'Mar' then numb else 0 end) as 'Mar', 
     sum(CASE WHEN [MONTH] = 'Apr' then numb else 0 end) as 'Apr', 
     sum(CASE WHEN [MONTH] = 'May' then numb else 0 end) as 'May', 
     sum(CASE WHEN [MONTH] = 'Jun' then numb else 0 end) as 'Jun', 
     sum(CASE WHEN [MONTH] = 'Jul' then numb else 0 end) as 'Jul', 
     sum(CASE WHEN [MONTH] = 'Aug' then numb else 0 end) as 'Aug', 
     sum(CASE WHEN [MONTH] = 'Sep' then numb else 0 end) as 'Sep', 
     sum(CASE WHEN [MONTH] = 'Oct' then numb else 0 end) as 'Oct', 
     sum(CASE WHEN [MONTH] = 'Nov' then numb else 0 end) as 'Nov', 
     sum(CASE WHEN [MONTH] = 'Dec' then numb else 0 end) as 'Dec' 
FROM @COMPLAINTS 
GROUP BY COMPANY 

合計は、クレームがない月の値を0に戻します。実行計画はピボットよりもコストがかかりません(とにかくこの小さなテストサンプルで)

関連する問題