SSRS 2008で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 |
+-----------+-------+-------+
ありがとうございました
サイト番号/名前が動的に変更されないことがわかっている場合は、CASE WHEN
:sを使用できます
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値を排除しました...
ここで リンク SQLを使用Fiddle例
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
という名前を付けます。データソースを作成し、データセットにクエリを記述します
Select PartNumber ,Cost,Site from SSRSPivot
matrix
をツールボックスからSSRSデザイナにドラッグします。Rows
の場合はPartNumber
を選択します。列の場合はSite
を選択し、データの場合はSum(Cost)
を選択します。
上記の手順を実行すると、以下のようなrow
とcolumn
の詳細が表示されます。
最終結果は次のようになります
このタイプのデータ変換は、 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 |