12

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   |
+-----------+-------+-------+

ありがとうございました

4

3 に答える 3

15

サイト番号/名前が動的に変更されないことがわかっている場合は、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フィドルの例とのリンクがあります

于 2013-03-26T11:09:32.863 に答える
2

MATRIXSSRSでは、レポートを使用して、を使用せずに行を列に変換する必要があります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デザイナにaをドラッグします。Rows選択の場合PartNumber。列の場合は選択Siteし、データの場合は選択します。Sum(Cost)

ここに画像の説明を入力してください

上記の手順を実行すると、row以下columnのような詳細が表示されます

ここに画像の説明を入力してください

最終結果は次のようになります

ここに画像の説明を入力してください

于 2013-03-26T12:05:40.790 に答える
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 FiddlewithDemoを参照してください

ただし、値の数が不明な場合は、動的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 FiddlewithDemoを参照してください。どちらも結果を出します:

| PART_NUMBER | SITE 1 | SITE 2 |
---------------------------------
|           1 |    2.4 |   68.8 |
于 2013-03-26T11:21:35.427 に答える