1

これが別の質問でカバーされている場合は申し訳ありませんが、必要なものと完全に一致する例が見つからず、混乱しています。

私はこのようなテーブルにデータを持っています:-

Name   |   Value
---------------
John   |   Dog
John   |   Cat
John   |   Fish
Bob    |   Python
Bob    |   Camel

そして、このようなデータが欲しいのですが…。

Name   |  Value_1 | Value_2 | Value_3
-------------------------------------
John   |  Dog     |  Cat    | Fish
Bob    |  Python  |  Camel  | NULL

犬、猫、魚などには20以上の可能な値があり、時間の経過とともに変化する可能性があるため、ユースケースステートメントは使用しません。

誰かがポインタを持っていますか?

4

3 に答える 3

3

これはあなたが求めているものに近づきます。他のユーザーが使用できるように、テーブル作成スクリプトとサンプル データも含めました。このソリューションのインスピレーションはここから来ました

-- Dynamic PIVOT
DECLARE @T AS TABLE(y INT NOT NULL PRIMARY KEY);

DECLARE
@cols AS NVARCHAR(MAX),
@y    AS INT,
@sql  AS NVARCHAR(MAX);

-- Construct the column list for the IN clause
-- e.g., [Dog],[Python]
SET @cols = STUFF(
(SELECT N',' + QUOTENAME(y) AS [text()]
FROM (SELECT DISTINCT [Value] AS y FROM dbo.table_1) AS Y
ORDER BY y
FOR XML PATH('')),
1, 1, N'');

-- Construct the full T-SQL statement
-- and execute dynamically
SET @sql = N'SELECT *
FROM (SELECT *
FROM dbo.table_1) AS D
PIVOT(MIN(value) FOR value IN(' + @cols + N')) AS P;';

PRINT @sql
EXEC sp_executesql @sql;
GO

テーブルの作成:

CREATE TABLE [dbo].[Table_1](
    [Name] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
    [Value] [varchar](50) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]

GO

サンプルデータ:

insert into dbo.table_1 values ('John','Dog')
insert into dbo.table_1 values ('John','Cat')
insert into dbo.table_1 values ('John','Fish')
insert into dbo.table_1 values ('Bob ','Python')
insert into dbo.table_1 values ('Bob ','Camel')
于 2009-10-08T00:42:41.700 に答える
0

これを見てください :

http://dotnetgalactics.wordpress.com/2009/10/23/using-sql-server-20052008-pivot-on-unknown-number-of-columns-dynamic-pivot/

役に立つかもしれません..

于 2009-10-26T11:32:54.680 に答える
0

この質問はやや似ています:

クロス集計 - 異なる日付 (Meeting1、Meeting2、Meeting 3 など) を同じ列に保存する

于 2009-10-08T00:41:12.353 に答える