2013-12-13 49 views
1

我的表是這樣的:刪除不需要的列透視

CEID BUID WEIGHT TREND SCORE Quarter 
--------------------------------------- 
CE001 BU001 4  5  20  1 
CE001 BU001 4  0  22  2 
CE001 BU001 4  0  23  3 
CE001 BU001 4  0  24  4 

我想要的結果是這樣的

CEID BUID WEIGHT TREND Q1 Q2 Q3 Q4 
--------------------------------------- 
CE001 BU001 4  NA 20 22 23 24 

我寫了下面的透視查詢:

select * 
from table 
pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter 

但是,既然趨勢也在變化,我得到了Pivoted查詢中的多個行,以及不同的趨勢值..

我怎樣才能達到上述結果?即:從查詢中刪除趨勢列。

回答

1

只要停止使用SELECT *對主表,並留下了TREND柱:

;WITH t AS 
(
    select CEID, BUID, WEIGHT, SCORE, Quarter from dbo.table 
) 
SELECT * FROM t 
pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter; 

如果你想TREND = NA如在「結果我想要的」,只是硬編碼:

;WITH t AS 
(
    select CEID, BUID, WEIGHT, TREND = 'NA', SCORE, Quarter from dbo.table 
) 
SELECT * FROM t 
pivot (sum (score) for quarter in ([1],[2],[3],[4])) as ScorePerQuarter; 
+0

謝謝..所以需要臨時表。 – Haswell

+0

@eyeanand不,這裏沒有臨時桌子。這是一個通用表格表達式(CTE)。你也可以用子查詢/派生表來完成。 –

+0

ok ..但不是CTE的一種臨時存儲,一旦它的使用結束就關閉....我有了這個查詢的想法...我也想將查詢結果插入到一個表中所以那裏的CTE語法創造了問題,因此我創建了一個臨時表並在該表上使用了數據透視表......反正我得到了你分享的想法。 – Haswell