2016-05-31 42 views
1

這在以下將返回數據因此,我已存儲過程:如何在SSRS報告中將SQL值從一列傳遞到多列?

GroupId FieldName Value   
1   Foo   28 
1   Bar   2 
1   FooBar  11 
1   Bizz   22 
1   UserName  John Smith 
2   Foo   4 
2   Bar   13 
2   FooBar  27 
2   Bizz   23 
2   UserName  Peter Jones 
3   Foo   5 
3   Bar   4 
3   FooBar  12 
3   Bizz   18 
3   UserName  Lisa Johnson 
........... 

正如在上面的示例數據看到,有3組(12 & 3真正有10組) )。每個組在FieldName列中都有相同的字段名稱(它就像標頭)並且在Value列中存儲值。

我需要在以下創建SSRS報告:

Foo   28    4    5 
Bar   2    13    4 
FooBar  11    27    12 
Bizz   22    23    18 
UserName  John Smith  Peter Jones  Lisa Johnson 

正如你看到的上面,每一組應該在不同的列和存儲在左側(第1列)標題。

在第一列中,我已通過FieldName;

第2列我通過表達:=IIF(Fields!GroupId.Value = 1, Fields!Value.Value, "")

在第三列我通過表達:=IIF(Fields!GroupId.Value = 2, Fields!Value.Value, "")

在第4列我通過表達:=IIF(Fields!GroupId.Value = 3, Fields!Value.Value, "")

但我實現產值像這樣:

Foo   28     
Bar   2      
FooBar  11     
Bizz   22     
UserName  John Smith   
Foo      4   
Bar      13   
FooBar      27   
Bizz      23   
UserName     Peter Jones 
Foo          5 
Bar          4 
FooBar         12 
Bizz          18 
UserName         Lisa Johnson 

你有什麼想法,怎麼了?我應該嘗試與團隊合作嗎?我已經嘗試過,但也沒有成功。如果有些事情不清楚 - 問我,我會盡力提供更多細節。

+0

您可以通過在SQL Server中進行旋轉來實現此輸出。 – gofr1

+0

@ gofr1我可以通過'PIVOT'成功實現它嗎?想象一下,存儲過程中的數據存儲到臨時表中,我怎樣才能正確使用'PIVOT'?數據也是動態的,最多可以有20個組。 – Infinity

+0

看到我的答案,也許它會幫助你! – gofr1

回答

0

您可以通過在SQL Server中實現來實現此輸出。

起初我創建temptable與輸入數據:

CREATE TABLE #temptable (
    GroupId int, 
    FieldName nvarchar(max), 
    [Value] nvarchar(max) 
) 
INSERT INTO #temptable VALUES  
(1,   'Foo',   '28'), 
(1,   'Bar',   '2'), 
(1,   'FooBar',  '11'), 
(1,   'Bizz',   '22'), 
(1,   'UserName',  'John Smith'), 
(2,   'Foo',   '4'), 
(2,   'Bar',   '13'), 
(2,   'FooBar',  '27'), 
(2,   'Bizz',   '23'), 
(2,   'UserName',  'Peter Jones'), 
(3,   'Foo',   '5'), 
(3,   'Bar',   '4'), 
(3,   'FooBar',  '12'), 
(3,   'Bizz',   '18'), 
(3,   'UserName',  'Lisa Johnson') 

然後我使用動態SQL,因爲我們不知道有多少GroupID的有:

DECLARE @columns nvarchar(max), @sql nvarchar(max) 
--Here we create a string like '[1],[2],[3]' named by GroupID's 
--because if there are many groupid's - manually assign columns for pivot 
--will be a long process 
SELECT @columns = STUFF((SELECT DISTINCT ','+QUOTENAME(GroupId) FROM #temptable FOR XML PATH('')),1,1,'') 

--Create sql statement to execute 
SELECT @sql = ' 
SELECT * 
FROM (
SELECT * 
FROM #temptable 
) as p 
PIVOT(
MAX([Value]) FOR GroupId IN ('[email protected]+') 
) as pvt' 
--And execute! 
EXEC(@sql) 

輸出:

FieldName 1   2   3 
Bar   2   13   4 
Bizz  22   23   18 
Foo   28   4   5 
FooBar  11   27   12 
UserName John Smith Peter Jones Lisa Johnson 
+0

謝謝你的回答,這看起來像在SQL方面工作,但刷新後的數據集字段沒有出現。你有想法如何解決它? – Infinity

+0

這是一個很好的答案關於此https://stackoverflow.com/questions/21914345/ssrs-dataset-field-refresh-not-updating-for-tablix請嘗試 – gofr1

+0

我知道數據集屬性中的刷新字段按鈕,但是點擊這個按鈕後我的意思是仍然沒有出現。 – Infinity

0

使用下面的SQL邏輯&將數據在報告的水平......

;WITH CTE AS (  
SELECT 1 GroupId ,'Foo' FieldName,'28' Value 
UNION ALL  
SELECT 1   ,'Bar'   ,'2' 
UNION ALL  
SELECT 1   ,'FooBar'  ,'11' 
UNION ALL  
SELECT 1   ,'Bizz'   ,'22' 
UNION ALL  
SELECT 1   ,'UserName'  ,'John Smith' 
UNION ALL  
SELECT 2   ,'Foo'   ,'4' 
UNION ALL  
SELECT 2   ,'Bar'   ,'13' 
UNION ALL  
SELECT 2   ,'FooBar'  ,'27' 
UNION ALL  
SELECT 2   ,'Bizz'   ,'23' 
UNION ALL  
SELECT 2   ,'UserName'  ,'Peter Jones' 
UNION ALL  
SELECT 3   ,'Foo'   ,'5' 
UNION ALL  
SELECT 3   ,'Bar'   ,'4' 
UNION ALL  
SELECT 3   ,'FooBar'  ,'12' 
UNION ALL  
SELECT 3   ,'Bizz'   ,'18' 
UNION ALL  
SELECT 3   ,'UserName'  ,'Lisa Johnson' 
) 

SELECT FieldName, CTE.Value 
FROM CTE 
CROSS APPLY (SELECT CTE.Value)A 
ORDER BY FieldName 
2

如果如果字段名稱是不是對你很重要,那麼你可以使用帶有字段名的rowgroup和列組的groupid的矩陣做到這一點只需在SSRS的順序。如果您不想標題,則通過更改文本框可見性選項來隱藏它們。

+0

是的,這是一個很好的方式去!這是我的。 – gofr1

相關問題