3

複数のレコードから 1 つのレコードとしてクエリを作成したいのですが、ピボットを使用したくありません。

ここにテーブルの例があります:

ID   Element_Name  Value
1    Parmitha      100
2    Anggun        200
3    Chandra       300
4    BagusofTerror 400
5    Laras         500
6    Jessica       600
7    Aisyah        700
......
200 Sonya          20000

そして、私は結果が次のようになりたい:

paramitha , anggun, chandra , bagusofterror, Laras , Jessica , Aisyah, ..... , Sonya
100 , 200, 300, 400,500,600,700,....,20000
4

4 に答える 4

3

http://blog.sqlauthority.com/2009/12/21/sql-server-comma-separated-values-csv-from-table-column-part-2/を参照すると、次のSQLクエリを使用できます。

私はこれを実行したことがないので、100%うまくいくかどうかはわかりません

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,'') 
于 2013-02-01T03:34:04.363 に答える
0

あなたが提供したサンプルデータセットで試したこれはどうですか。

declare @intFlag int
Declare @AnsString nvarchar(2000)

SET @intFlag=1
SET @AnsString=''

While (@intFlag<=200)
Begin
     Select @AnsString=@AnsString
                       +CONVERT(Varchar(20),(SELECT [Element_Name]
                                              FROM TABLE where RowID=@intFlag))
               +', '
SET @intFlag=@intFlag+1
if @intFlag=199
break;
END
Print @AnsString
--Select @AnsSTring
于 2013-02-01T05:00:31.170 に答える
0

これはクロス集計クエリと呼ばれていました。まだあるかどうかはわかりません...

SELECT SUM(CASE WHEN id=1 THEN value ELSE 0 END) AS parmitha,
   SUM(CASE WHEN id=2 THEN value ELSE 0 END) AS anggun,
   SUM(CASE WHEN id=3 THEN value ELSE 0 END) AS chandra,

   ...etc...

   SUM(value) AS total
FROM My_Table
WHERE ...etc...

私はC#を知りませんが、列をループしてSUM()を準備できると確信しています。

于 2013-02-01T03:36:04.650 に答える
0

このデータを別の列に配置するPIVOT場合は、SQL Server 2005+ のデータに対して動的 SQL を使用できます。コードは次のようになります。

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(element_name) 
                    from yourtable 
                    group by element_name, id
                    order by id
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query 
    = 'select '+@cols+'
       from
       (
         select Element_name, Value
         from yourtable
       ) p
       pivot
       (
          max(value)
          for Element_name in('+@cols+')
       ) piv'

execute(@query)

SQL Fiddle with Demoを参照してください。これにより、次の結果が得られます。

| PARMITHA | ANGGUN | CHANDRA | BAGUSOFTERROR | LARAS | JESSICA | AISYAH | SONYA |
----------------------------------------------------------------------------------
|      100 |    200 |     300 |           400 |   500 |     600 |    700 | 20000 |
于 2013-02-01T10:37:39.453 に答える