sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server 2005 - Pivotering af data uden sum/antal og dynamisk liste over værdier

Dette kommer tæt på det, du leder efter. Jeg har også inkluderet et script til oprettelse af tabel og eksempeldata, som andre kan bruge. Inspiration til denne løsning kom fra her

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

Oprettelse af tabel:

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

Eksempeldata:

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


  1. MySQL - Hvordan vælger man rækker, hvor værdien er i matrix?

  2. får første række i postgres-forespørgsel

  3. Java får det automatiske stigningsnummer for den aktuelle indsatte række for at bruge det til en anden forespørgsel?

  4. Peg på localhost\sqlexpress ved kun at bruge localhost