簡體   English   中英

SQL Server 2005-在沒有求和/計數和動態值列表的情況下透視數據

[英]SQL Server 2005 - Pivoting Data without a sum / count and dynamic list of values

很抱歉,如果另一個問題在其他地方都涉及到此問題,但是我找不到任何與我的需求完全匹配的示例,這讓我感到困惑。

我在表中有這樣的數據:

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多種可能的值,並且它們可能會隨着時間變化。

任何人都有指針嗎?

這接近您所追求的。 我還包括一個表創建腳本和示例數據供其他人使用。 這種解決方案的靈感來自這里

-- 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM