0

サンプルデータ

 date     | num | name | value
 01012012 |  1  |    A |  20
 01012012 |  1  |    B |  30
 01012012 |  2  |    C |  40

これを好きになりたい

 date     | num |  A |  B |  C
 01012012 |   1 | 20 | 30 | --
 01012012 |   2 | -- | -- | 40
  • 名前は固定されていません。多くの名前を許可できます
4

2 に答える 2

2

動的列の場合、動的 SQL を使用する必要があります

SQL フィドルの例

declare
    @cols nvarchar(max),
    @stmt nvarchar(max)

select @cols = isnull(@cols + ', ', '') + '[' + Name + ']' from table1

select @stmt = '
    select *
    from table1 as T
        pivot 
        (
            max(T.value)
            for name in (' + @cols + ')
        ) as P'

exec sp_executesql  @stmt = @stmt

動的な列数が必要ない場合は、次のようなプレーン SQL を使用できます。

select *
from table1 as T
    pivot 
    (
        max(T.value)
        for name in ([A],[B],[C])
    ) as P
于 2012-11-02T08:22:21.260 に答える
2

のようなものはどうですか

DECLARE @Table TABLE(
        date DATETIME,
        num INT,
        name VARCHAR(20),
        value FLOAT
)
INSERT INTO @Table SELECT '20121201',1,'A',20
INSERT INTO @Table SELECT '20121201',1,'B',30
INSERT INTO @Table SELECT '20121201',2,'C',40

SELECT  *
FROM    (
            SELECT  date,
                    num,
                    name,
                    value
            FROM    @Table
        ) t
PIVOT   (
            SUM(Value) FOR name IN ([A],[B],[C])
        ) p

SQL フィドルのデモ

于 2012-11-02T08:18:30.373 に答える