2011-04-28 155 views
2

是否有人可以幫助我在SQL中的交叉表/透視查詢2005交叉表或SQL樞軸查詢2005

給定的數據看起來像

EmpId OrgId DayCt Cost 

1  20  15  100 

2  20  36  300 

3  40  25  200 

4  40  10  50 

結果是這樣的:

EmpId  OrgId 20   OrgId 40 

     DayCt Cost   DayCt Cost 


1   15  100 

2   36  300 

3        25  200 

4        10  50 

EmpId在第一欄中,然後在下一欄中有組織ID。但是在每個OrgId下,我希望DayCt &成本也包括在子列中。不知道這是否可行。請幫忙。

+0

您可以爲您的示例數據預期的效果最接近? – 2011-04-28 10:33:03

+0

感謝您快速瀏覽。無論我做什麼,但無法在這裏格式化。讓我再嘗試一次。 – KIA 2011-04-28 10:37:21

+0

爲了佈局表格,您已經使用了空格,那麼您只需選擇表格並點擊工具欄中的「{}」圖標,以便將其視爲代碼,並且空格不會摺疊爲一個。 – 2011-04-28 10:39:01

回答

1

有沒有這樣的事情子列這似乎是應該在你的應用程序/報告工具中完成的事情。

這是你可以在SQL得到

;WITH T(EmpId,OrgId,DayCt,Cost) AS 
(
select 1, 20, 15, 100 UNION ALL 
select 2, 20, 36, 300 UNION ALL 
select 3, 40, 25, 200 UNION ALL 
select 4, 40, 10, 50 
) 
SELECT EmpId, 
     MAX(CASE WHEN OrgId =20 THEN DayCt END) AS [OrgId 20 DayCt], 
     MAX(CASE WHEN OrgId =20 THEN Cost END) AS [OrgId 20 Cost], 
     MAX(CASE WHEN OrgId =40 THEN DayCt END) AS [OrgId 40 DayCt], 
     MAX(CASE WHEN OrgId =40 THEN Cost END) AS [OrgId 40 Cost] 
FROM T 
GROUP BY EmpId 

返回

EmpId  OrgId 20 DayCt OrgId 20 Cost OrgId 40 DayCt OrgId 40 Cost 
----------- -------------- ------------- -------------- ------------- 
1   15    100   NULL   NULL 
2   36    300   NULL   NULL 
3   NULL   NULL   25    200 
4   NULL   NULL   10    50 
+0

對不起,但我有一個100 OrgIds,這是否意味着我必須在所有可能的DayCt和Cost組合的查詢中鍵入他們所有的? – KIA 2011-04-28 12:51:40

+0

@KIA - 是的。沒有SQL Server的功能可以爲你做到這一點。如果'OrgId'不是靜態的,那麼你需要動態SQL來生成上述(谷歌「動態數據透視表」) – 2011-04-28 12:53:30

+0

@KIA:你打算如何顯示它們? @馬丁:+1,順便說一句。 – 2011-04-28 13:13:44