2016-05-31 22 views
1

だから私は、次のデータを返すストアドプロシージャていますSSRSレポートの1つから複数の列に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 
........... 

あなたは上記のサンプルデータで見ると、本当のための10個のグループが3グループ(12 & 3がありますされます) )。各グループは同じフィールド名を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列目)に保存されている別の列とヘッダーにする必要があります。

第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」でうまくいく方法はありますか?私がストアドプロシージャのデータをtempテーブルに保存しているとしたら、 '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') 

我々はそこにあるどのように多くのGroupIDさんを知らないので、その後、私は、動的SQLを使用します。

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

私はデータセットのプロパティの「Refresh Fields」ボタンについて知っていますしかし、このボタンのフィールドをクリックした後の私の意図はまだ表示されません。 – 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とグループIDの列グループで行列を使用して、単純にSSRSでこれを行うことができます。ヘッダーを必要としない場合は、テキストボックスの表示オプションを変更してヘッダーを非表示にします。

+0

ええ、それは行く良い方法です!ここに私のアップです。 – gofr1

関連する問題