SQL Server 2005 - сводные данные без суммы / количества и динамического списка значений - PullRequest
1 голос
/ 08 октября 2009

Извините, если об этом речь пойдет в другом месте, но я не могу найти ни одного примера, который бы точно соответствовал тому, что мне нужно, и я запутался.

У меня есть данные в таблице: -

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 возможных значений, и они могут измениться со временем.

У кого-нибудь есть указатели?

Ответы [ 3 ]

3 голосов
/ 08 октября 2009

Это близко к тому, что вы ищете. Я также включил сценарий создания таблицы и пример данных для других. Вдохновение для этого решения пришло от здесь

-- 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')
0 голосов
/ 26 октября 2009
0 голосов
/ 08 октября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...