我有這樣一個表(可以稱之爲T1
):PIVOT在SQL Server中沒有聚合函數
Date | Category | Data
-------------------------------
2014-01-01 | 1 | 1.0
2014-01-01 | 2 | 2.0
2014-01-01 | 3 | 3.0
2014-01-02 | 1 | 4.0
2014-01-02 | 2 | 5.0
2014-01-02 | 3 | 6.0
注意Data
是浮點數,不連續的,我只是做了他們的方式因此它的更容易看到他們在結果中的位置。還有一個表翻譯Category
號碼名稱(可以說(T2
):
Category | Name
----------------
1 | A
2 | B
3 | C
而且我想一個查詢時可能會返回:
Date | B | C
---------------------------
2014-01-01 | 2.0 | 3.0
2014-01-02 | 5.0 | 6.0
我想過嘗試與PIVOT
我沒有使用過,但是,我找不到一個不使用聚合函數的方法,但是後來我通過Date
/Category
組合使用像AVG
這樣的聚合,實際上只有一行應該工作。這是我基於的嘗試:
SELECT [Date],
[2] as B,
[3] as C
FROM (SELECT * FROM T1 WHERE Category >= 2) AS SourceTable
PIVOT
(
AVG(Data)
FOR Category IN ([2], [3])
) AS PivotTable;
它得到一種接近:
Date | B | C
---------------------------
2014-01-01 | 2.0 | NULL
2014-01-01 | NULL | 3.0
2014-01-02 | 5.0 | NULL
2014-01-02 | NULL | 6.0
但我怎麼擺脫空的,並得到所有相同的日期是在同一行?
可正常工作更換
(結果中有兩行),你的問題在哪裏? – dean
您的表格中有更多列未顯示在此處。也許是使每行都是唯一的ID標識列。當你在你的子查詢中選擇*時,你也在檢索ID列,這會使你的結果變成你所看到的。將*更改爲實際需要的列(日期,數據和類別)。 –
爲了強調Mikael的觀點 - 考慮您在應用'PIVOT'運營商之前立即擁有的結果集。 *'PIVOT'運算符中沒有提到的每個*列都有效地變成了'GROUP BY'列,因此每個獨特的組合(在'PIVOT'列中未提及)將在結果集中生成一行。 –