1

私の SQL Server 2008 レポートは、表に複数の行を返します。単純な select ステートメントは 2 つの列を返します。1 つはレコード番号で、もう 1 つはセクターです。セクター列には、6 つの異なる値のいずれかを含めることができます。

編集:NULL値はセクター列で許可されます。

このデータをテーブルの 1 行に表示したい。

レコード番号 1 にはセクター A、セクター C、セクター E があり、レコード 2 にはセクター B、セクター C があり、レコード 3 には何もないとします。

私は3行のデータを求めています。また、2つの方法で表示する必要があります。すべてのセクターがコンマで区切られた同じセルに表示されるようにします。もう 1 つは、各カテゴリの個別のセルです。

Record number  | Sector
1              | A, C, E
2              | B, C
3              | 

または

Record Number | Sector A | Sector B | Sector C | Sector D | Sector E
1             |  A       |          | C        |          | E
2             |          | B        | C        |          | 
3             |          |          |          |          | 

現時点で、私のレポートには 6 行あります。

Record Number | Sector
1             | A
1             | C
1             | E
2             | B
2             | C
3             | 

この問題を回避する方法はありますか?

SQL ステートメントを記述するのではなく、クエリ デザイナーを使用しています。

4

1 に答える 1

2

コンマ区切りのsector値のリストで必要な最初の結果を取得するには、 and を使用FOR XML PATHSTUFFます。コードは次のようになります。

select t1.recordnumber,
  STUFF((SELECT ', ' + t2.sector
         from yourtable t2
         where t1.recordnumber = t2.recordnumber
          FOR XML PATH (''))
          , 1, 1, '')  AS Sector
from yourtable t1
group by t1.recordnumber

SQL Fiddle with Demoを参照してください。結果は次のとおりです。

| RECORDNUMBER |   SECTOR |
---------------------------
|            1 |  A, C, E |
|            2 |     B, C |
|            3 |   (null) |

次に、単一の行での結果を取得するには、次の関数recordNumberを使用できます。PIVOT

select *
from
(
  select recordNumber, sector
  from yourtable
) src
pivot
(
  max(sector)
  for sector in (A, B, C, D, E)
) piv;

SQL Fiddle with Demoを参照してください。このクエリの結果は次のとおりです。

| RECORDNUMBER |      A |      B |      C |      D |      E |
-------------------------------------------------------------
|            1 |      A | (null) |      C | (null) |      E |
|            2 | (null) |      B |      C | (null) | (null) |
|            3 | (null) | (null) | (null) | (null) | (null) |
于 2013-03-03T18:56:06.247 に答える