0

私は MS SQL Server 2008 R2 を使用しており、次のような一連のデータがあります。

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

ヘッダーで使用される Location のように、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
4

2 に答える 2

2

集計関数を追加するだけです:

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
于 2013-01-16T19:00:27.303 に答える
1

値をリストの下部に表示する場合nullは、次を使用できます。

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 FiddlewithDemoを参照してください

この関数を使用してPIVOT、データを変換することもできます。

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 FiddlewithDemoを参照してください

結果は次のとおりです。

| COLUMN_0 |      JOHN |      MARK |
------------------------------------
| Location |   Main St | South Ave |
| Location | South Ave |    2nd St |
| Location |    2nd St |    (null) |
| Location | Lewis Ave |    (null) |
于 2013-01-16T19:05:59.907 に答える