2014-10-07 45 views
0

我需要將一些結果放在列中。見下面的例子...將行結果設置爲SQL Server中的列

SELECT * 
FROM tblAccount 
WHERE Code IN ('H20', 'T10') 
ORDER BY ID, YearPaid 

結果...

ID YearPaid  Amount Code Name 
------------------------------------------- 
1 2011-01-01 31 50 H20 Service 
1 2011-01-01 45 00 T10 Service 
2 2011-01-02 31 50 H20 Benefit 
2 2011-01-02 45 00 T10 Benefit 
3 2011-01-03 31 20 H20 Pay 
3 2011-01-03 45 00 T10 Pay 

我需要顯示像下面的結果...

ID YearPaid Amount Code Name  Amount Code 
-------------------------------------------------------- 
1 2011-01-01 31 50 H20 Service 45 00 T10 
2 2011-01-02 31 50 H20 Benefit 45 00 T10 
3 2011-01-03 31 20 H20 Pay  45 00 T10 

我想用一個支點,但我沒有彙總任何東西。

我可以爲每個代碼做臨時表,但它們必須是更好的方法。

任何幫助將是偉大的!

+0

您仍然可以使用數據透視表。如果你做了一個值列的總和,但是按照與表中相同數量的字段進行組合,那麼你的總和基本上只顯示你的正常數據。這裏有同樣的想法 – DanK 2014-10-07 16:40:32

回答

2

我想用一個支點,但我沒有任何聚集,當用戶說,你可以看到,你可以使用minmax這未必是真實的,很多次。因此,假設每個ID可以有2行,則YearPaid:

;WITH CTE AS 
(
    SELECT *, 
      RN = ROW_NUMBER() OVER(PARTITION BY ID, YearPaid ORDER BY ID) 
    FROM tblAccount 
    WHERE Code IN ('H20', 'T10') 
) 
SELECT ID, 
     YearPaid, 
     MIN(CASE WHEN RN = 1 THEN Amount END) Amount1, 
     MIN(CASE WHEN RN = 1 THEN Code END) Code1, 
     MIN(CASE WHEN RN = 1 THEN Name END) Name1, 
     MIN(CASE WHEN RN = 2 THEN Amount END) Amount2, 
     MIN(CASE WHEN RN = 2 THEN Code END) Code2, 
     MIN(CASE WHEN RN = 2 THEN Name END) Name2 
FROM CTE 
GROUP BY ID, 
     YearPaid 
+0

謝謝!工作得很好! – RMM 2014-10-07 17:45:04