2013-01-16 76 views
0

我使用MS SQL Server 2008 R2和有一組數據是這樣的:SQL重新組織表SSRS顯示

LocaId Location StaffId 
1  Main St 1 
2  South Ave 1 
3  South Ave 2 
4  2nd St 1 
5  2nd St 2 
6  Lewis Ave 1 

我想在頭使用方式和地點的SSRS報告中顯示的數據。

  John  Mark 
Location Main St South Ave 
Location South Ave 22nd St 
Location 22nd St Null 
Location Lewis Ave Null 

但與下面的代碼:

SELECT 'Location', 
(CASE WHEN l.StaffId = 1 THEN l.Location ELSE NULL END) AS 'John', 
(CASE WHEN l.StaffId = 2 THEN l.Location ELSE NULL END) AS 'Mark' 
FROM Location l 

我得到下面的結果。這似乎很容易正確顯示數據,但我沒有得到我需要在報告中顯示的結果。

  John  Mark 
-------- ----------- --------- 
Location Main St  NULL 
Location South Ave NULL 
Location 22nd St  NULL 
Location Lewis Ave NULL 
Location NULL  Main St 
Location NULL  South Ave 

回答

2

只需添加一個聚合函數:如果你想null值出現在列表的底部

SELECT l.location, 
MAX(CASE WHEN l.StaffId = 1 THEN l.Location ELSE NULL END) AS 'John', 
MAX(CASE WHEN l.StaffId = 2 THEN l.Location ELSE NULL END) AS 'Mark' 
FROM Location l 
GROUP BY l.location 
+0

謝謝你,我一直認爲是總數字和不文本數據。 –

1

,那麼你可以使用:

SELECT 'Location', 
    MAX(CASE WHEN l.StaffId = 1 THEN l.Location ELSE NULL END) AS 'John', 
    MAX(CASE WHEN l.StaffId = 2 THEN l.Location ELSE NULL END) AS 'Mark' 
FROM 
(
    select StaffId, location, 
    row_number() over(partition by StaffId order by locaid) rn 
    from Location 
) l 
GROUP BY rn 

SQL Fiddle with Demo

您還可以使用PIVOT函數來tra nsform數據:

select 'Location', 
    [1] as 'John', 
    [2] as 'Mark' 
from 
(
    select staffid, location, 
    row_number() over(partition by StaffId order by locaid) rn 
    from location 
) src 
pivot 
(
    max(location) 
    for staffid in ([1], [2]) 
) piv 

SQL Fiddle with Demo

結果是:

| COLUMN_0 |  JOHN |  MARK | 
------------------------------------ 
| Location | Main St | South Ave | 
| Location | South Ave | 2nd St | 
| Location | 2nd St | (null) | 
| Location | Lewis Ave | (null) |