2017-06-13 5 views
2

長時間リスナー、初めて発信者...以下のとおり、私はテーブル(トラッカー)を持っている初心者SQLクエリピボット

ID | Works Order |Activity |Status 
---|----------------|-----------|------ 
1 | W123456789-001 |10A  |GOOD 
2 | W123456789-002 |10A  |GOOD 
3 | W123456789-003 |10A  |SCRAP 
4 | W123456789-001 |20A  |GOOD 
5 | W123456789-002 |20A  |GOOD 

...ワークス注文番号をW123456789- 001は実際の作品注文番号で構成されています。 W123456789、その後に部品番号が続きます。 001.「アクティビティ」は10A、20A、30A & 110Aと固定されています。状態は「良い」または「悲しい」です。

Works Order |10A |20A |30A |110A 
-------------|----|----|----|---- 
W123456789 |2 |2 |0 |0  

... colsの10,20,30 & 110A内の数字は「GOODの各活動のためのカウントです:私は次のような&出力、それを要約したいと思います。

私は、そこに行く道のりのほとんどを次のコードで得ることができます。

select [WO_Part],[10A G],[20A G],[30A G],[110AG] 
from 
(
    select 
    [Activity], 
    LEFT([WOPart],10) AS [WO_Part], 
    iIf([Status]='GOOD ',1,0) AS [STATUS], 
    [ACTIVITY]+LEFT([STATUS],1) AS [CONCAT] 
    from Tracker 
) d 
pivot 
(
    SUM([Status]) 
    for [CONCAT] in ([10A G],[20A G],[30A G],[110AG]) 
) piv; 

しかし、私は以下のような活動あたりの行に広がる結果と作品の注文ごとに複数の行を取得:

Works Order |10A |20A |30A |110A 
-------------|----|----|----|---- 
W123456789 |2 |0 |0 |0 
W123456789 |0 |2 |0 |0 

結果は、単一の上で結合されているので、どのように私は私のクエリを変更する必要があります行?

Works Order |10A |20A |30A |110A 
-------------|----|----|----|---- 
W123456789 |2 |2 |0 |0 

ありがとうございます!

答えて

1

pivotとすると、FROM句の余分な列が余分な行になります。したがって、選択したものに注意する必要があります。

select [WO_Part], [20A G],[30A G],[110AG] 
from (select LEFT([WOPart], 10) AS [WO_Part], 
      (case when [Status] = 'GOOD ' then 1 else 0 end) AS [STATUS], 
      [ACTIVITY]+LEFT([STATUS],1) AS [CONCAT] 
     from Tracker 
    ) d 
pivot (SUM([Status]) 
     for [CONCAT] in ([20A G],[30A G],[110AG]) 
    ) piv; 

この現象は、条件付き集計を好む理由の1つです。

+0

いいです、ゴードンさんに感謝します。私はSQLに慣れておらず、私の雇用主の要求に追いつくためには徹底的に自己教えています。あなたのような貴重なアドバイス。ありがとうございました! – John