2013-03-26 81 views
8

是否可以在SSRS 2008中將2行合併到單行中? 每個部分都會有記錄每個站點SQL Server將2行合併到1

+---------------+-------+-------+ 
|Part Number |Cost |Site | 
+---------------+-------+-------+ 
|1    |2.4 |Site 1 | 
|1    |68.8 |Site 2 | 
+---------------+-------+-------+ 

所需的結果

+-----------+-------+-------+ 
|Part Number|Site 1 |Site 2 | 
+-----------+-------+-------+ 
| 1   |2.4 |68.8 | 
+-----------+-------+-------+ 

謝謝

+0

您需要查找CROSS TAB查詢。 – Prasanna 2013-03-26 10:56:06

回答

10

如果你知道你的網站數/名稱不會動態更改,然後可以使用CASE WHEN:■

SELECT PartNumber, 
MAX(CASE WHEN Site=1 THEN Cost ELSE NULL END) AS Site1_Cost, 
MAX(CASE WHEN Site=2 THEN Cost ELSE NULL END) AS Site2_Cost 
FROM Parts 
GROUP BY PartNumber 

通過分組,我們消除了NULL值。 ..

這裏link與SQL小提琴例如

+0

感謝您的幫助,這個簡單的解決方案解決了我的問題 – Spacko 2013-03-26 23:25:47

+0

如果我想所有的記錄不僅僅是最大值,那麼我該怎麼辦 – Strikers 2014-08-05 10:03:20

1

這種類型的數據變換被稱爲一個PIVOT。從SQL Server 2005開始,有一個函數可以將數據轉換爲列。

如果你有一個已知數量Site值要轉成列,那麼你可以硬編碼查詢:

select part_number, [Site 1], [Site 2] 
from 
(
    select part_number, cost, site 
    from yourtable 
) src 
pivot 
(
    sum(cost) 
    for site in ([Site 1], [Site 2]) 
) piv; 

SQL Fiddle with Demo

但是,如果你有一個未知號碼那麼您將需要使用動態SQL來生成要在查詢中使用的列列表:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(site) 
        from yourtable 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT part_number,' + @cols + ' 
      from 
      (
       select part_number, cost, site 
       from yourtable 
      ) x 
      pivot 
      (
       sum(cost) 
       for site in (' + @cols + ') 
      ) p ' 

execute(@query) 

請參閱SQL Fiddle with Demo。雙方將給出結果:

| PART_NUMBER | SITE 1 | SITE 2 | 
--------------------------------- 
|   1 | 2.4 | 68.8 | 
+0

非常感謝您的解決方案 – Spacko 2013-03-26 23:25:12

0

在SSRS你需要使用MATRIX報告行轉變成列,而不使用PIVOT operator

假設你有一個表SSRSPivot

Create table SSRSPivot 
(PartNumber int ,Cost decimal(18,2),Site varchar(max)) 


Insert into SSRSPivot 
values 
(1,2.4,'Site 1'), 
(1,68.8,'Site 2') 

的數據是採用以下格式

+---------------+-------+-------+ 
|PartNumber |Cost |Site | 
+---------------+-------+-------+ 
|1    |2.4 |Site 1 | 
|1    |68.8 |Site 2 | 
+---------------+-------+-------+ 

創建一個新的空白報告,並將它命名爲PIVOT .Create數據源和數據集編寫查詢

Select PartNumber ,Cost,Site from SSRSPivot 

enter image description here

將一個matrix從工具箱到SSRS designer.For Rows選擇PartNumber。對於列選擇Site和數據選擇Sum(Cost)

enter image description here

當你做對上面的步驟,你將得到rowcolumn的細節,如下面

enter image description here

最終結果一個會看起來像

enter image description here