0

テーブルから csv を作成したいときに問題があります..

ここに私のテーブルのサンプルがあります...

ID  HEADER_row  Value_row
1   A             100
2   B             200
3   C             300
4   D             400
5   E             500
6   A             600
7   B             700
8   C             800
9   D             900
10  E             1000

そして、私が作成したいcsvデータモデルです。これをチェックしてください:

A   B   C   D   E   A   B   C   D   E
100 200 300 400 500 600 700 800 900 1000

A   B   C   D   E
1OO 2OO 3OO 4OO 5OO
600 700 800 900 1000

私はすでに最初のモデルの問題でこれを試しています...

SELECT STUFF(
(SELECT ',' + s.ElementName
FROM tableName s
FOR XML PATH('')),1,1,'') 

UNION ALL

SELECT STUFF(
(SELECT ',' + s.Value
FROM tableName s
FOR XML PATH('')),1,1,'') 

しかし、それは私に次のような結果を与えます:

A   B   C   D   E   A   B   C   D   E
100 200 300 400 500 600 700 800 900 1000

今、私はこのような他の結果を得たい

 A  B   C   D   E
    1OO 2OO 3OO 4OO 5OO
    600 700 800 900 1000

ピボットを使用する以外に、問題に対してどのようなクエリを使用する必要がありますか?

4

1 に答える 1

1

このデータを別々の行に分割するには、row_number()を取得する 2 番目のクエリにの使用を含めValue_rowます。

を適用することによりrow_number()、データをHeader_row値で分割して、2 つの個別の番号を割り当てることができます。

select Value_row,
  row_number() over(partition by header_row order by id) rn
from yourtable

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

| VALUE_ROW | RN |
------------------
|       100 |  1 |
|       600 |  2 |
|       200 |  1 |
|       700 |  2 |
|       300 |  1 |
|       800 |  2 |
|       400 |  1 |
|       900 |  2 |
|       500 |  1 |
|      1000 |  2 |

次に、これを既存のクエリに組み込むと、コードは次のようになります。

SELECT STUFF(
            (SELECT ',' + s.HEADER_row
            FROM yourtable s
            FOR XML PATH('')),1,1,'') 
UNION ALL
SELECT DISTINCT 
  STUFF(
            (SELECT ',' + cast(Value_row as varchar(50))
            from
            (
              select Value_row,
                row_number() over(partition by header_row order by id) rn
              from yourtable
            ) src      
            where r.rn = src.rn
            FOR XML PATH('')),1,1,'')
FROM
(
  select Value_row,
    row_number() over(partition by header_row order by id) rn
  from yourtable
)r ;

デモで SQL Fiddle を参照してください

これにより、次の結果が得られます。

|                 LIST |
------------------------
|  A,B,C,D,E,A,B,C,D,E |
|  100,200,300,400,500 |
| 600,700,800,900,1000 |
于 2013-02-04T11:07:14.930 に答える