2

これを変換する方法:

ID   Name    Description
1    Test1a   TestDesc1a
1    Test1b   TestDesc1b
2    Test2a   TestDesc2a
2    Test2b   TestDesc2b

これに:

ID   Column          1            2
1    Name          test1a       test1b
1    Description   testDesc1a   testDesc1b
4

4 に答える 4

0

複雑なピボットテーブルを要求します。これについてはこちらをお読みください:http://msdn.microsoft.com/en-us/library/ms177410.aspx

于 2012-04-21T19:39:13.870 に答える
0

これは解決するのが難しい質問ですが、指定された出力は適切/競合していません。以下はあなたが試すことができる同様の解決策です

サンプルテーブルの作成:

CREATE TABLE [dbo].[TestTable](
[Id] [int] NULL,
[Name] [nvarchar](50) NULL,
[Description] [nvarchar](50) NULL)

サンプル値の挿入:

INSERT INTO TestTable VALUES (1,'Test1a','TestDesc1a')
INSERT INTO TestTable VALUES (2,'Test1b','TestDesc1b')
INSERT INTO TestTable VALUES (3,'Test2a','TestDesc2a')
INSERT INTO TestTable VALUES (4,'Test2b','TestDesc2b')

ピボットを使用して目的の出力を取得するためのクエリ:

SELECT  'Name' AS [Column], [1], [2],[3],[4]
FROM
(SELECT Name, id from TestTable) AS ST
PIVOT
(Max(Name) FOR ID IN ([1], [2],[3],[4])) AS PT

UNION

SELECT  'Description' AS [Column], [1], [2],[3],[4]
FROM
(SELECT  id,[Description] from TestTable) AS ST
PIVOT
(Max([Description]) FOR ID IN ([1], [2],[3],[4])) AS PT
ORDER BY [Column] DESC

出力:

Column         1           2          3           4
Name           Test1a      Test1b     Test2a      Test2b
Description    TestDesc1a  TestDesc1b TestDesc2a  TestDesc2b

これがあなたの質問を解決するのに役立つことを願っています。

于 2012-04-21T21:09:41.797 に答える
0

PIVOT クエリを使用する必要があります。

PIVOT クエリの基本的な説明は、[MSDN][1] にあります。

于 2012-04-21T19:53:56.717 に答える
0

PIVOT少数の列のみを使用する場合は静的を使用できますが、ID が 2 つ以上あると推測されるPIVOTため、このクエリには動的を使用することをお勧めします。動的ピボットを使用すると、指定した 2 つ以上の ID を使用できるようになり、テーブルからすべての ID が取得され、次のようになりますPIVOT

create table temp
(
    id int,
    name varchar(10),
    description varchar(20)
)

insert into temp values (1, 'Test1a', 'TestDesc1a')
insert into temp values (1, 'Test1b', 'TestDesc1b')
insert into temp values (2, 'Test2a', 'TestDesc2a')
insert into temp values (2, 'Test2b', 'TestDesc2b')


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

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.id) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ''Name'' as [Column], ' + @cols + ' from 
            (
                select id
                    , name
                from temp
           ) x
            pivot 
            (
                 max(name)
                for id in (' + @cols + ')
            ) p 
            UNION 
            SELECT ''Description'' as [Column], ' + @cols + ' from 
            (
                select id
                    , description
                from temp
           ) x
            pivot 
            (
                 max(description)
                for id in (' + @cols + ')
            ) p '


execute(@query)

drop table temp

結果:

Column          1             2
Description     TestDesc1b    TestDesc2b
Name            Test1b        Test2b
于 2012-05-02T15:57:06.077 に答える