2013-03-03 50 views
1

我的SQL Server 2008報告在表中返回多行。一個簡單的select語句返回兩列,一個是記錄號,另一個是扇區。扇區列可以包含6個不同值中的任何一個。SSRS多行數據

編輯:NULL值在扇區列允許。

我想這個數據在我的表中的一行。

假設記錄編號1具有扇區A,扇區C和扇區E 並且記錄2具有扇區B和扇區C 並且記錄3沒有。

我在三行數據之後。我也需要它顯示兩種方式。一個讓所有的部門出現在同一個單元格中,用逗號分隔。另一種是爲每個類別

Record number | Sector 
1    | A, C, E 
2    | B, C 
3    | 

或者

Record Number | Sector A | Sector B | Sector C | Sector D | Sector E 
1    | A  |   | C  |   | E 
2    |   | B  | C  |   | 
3    |   |   |   |   | 

一個單獨的單元格在此刻我的報告給我6行。

Record Number | Sector 
1    | A 
1    | C 
1    | E 
2    | B 
2    | C 
3    | 

有沒有辦法解決這個問題?

我正在使用查詢設計器而不是編寫SQL語句。

+0

請明確您的最終查詢結果應該是什麼樣子。當你說你需要「兩種方式」時,不確定你的意思。兩個單獨的查詢或合併爲一個結果。此外,不確定您使用逗號時的含義。這是一個列分隔符還是分隔列表中的多個項目? – Tim 2013-03-03 17:22:35

+0

閱讀SQL Server中的PIVOT查詢並在之後報告。 – Tim 2013-03-03 17:26:44

+0

原始表格中有多少行?您希望作爲最終結果的單行可能非常非常長。 – Tim 2013-03-03 17:38:01

回答

2

要使用逗號分隔的sector值列表獲得第一個結果,您需要使用FOR XML PATHSTUFF。代碼將爲:

select t1.recordnumber, 
    STUFF((SELECT ', ' + t2.sector 
     from yourtable t2 
     where t1.recordnumber = t2.recordnumber 
      FOR XML PATH ('')) 
      , 1, 1, '') AS Sector 
from yourtable t1 
group by t1.recordnumber 

請參閱SQL Fiddle with Demo。其結果是:

| RECORDNUMBER | SECTOR | 
--------------------------- 
|   1 | A, C, E | 
|   2 |  B, C | 
|   3 | (null) | 

然後拿到recordNumber的結果單行,您可以使用PIVOT功能:

select * 
from 
(
    select recordNumber, sector 
    from yourtable 
) src 
pivot 
(
    max(sector) 
    for sector in (A, B, C, D, E) 
) piv; 

SQL Fiddle with Demo。此查詢的結果是:

| RECORDNUMBER |  A |  B |  C |  D |  E | 
------------------------------------------------------------- 
|   1 |  A | (null) |  C | (null) |  E | 
|   2 | (null) |  B |  C | (null) | (null) | 
|   3 | (null) | (null) | (null) | (null) | (null) | 
+0

像這樣的事情可以在查詢設計器中完成,說一個計算字段? – user1957907 2013-03-03 19:11:02

+0

@ user1957907您應該可以在查詢設計器中放置這些查詢。 – Taryn 2013-03-03 19:22:50

+0

嗨這樣做的缺點是,如果您將來要更改報表,則必須堅持Query Designer的編程方面。我在想,也許我可以做一個計算場或特別是在表2中的東西? – user1957907 2013-03-04 15:14:36