Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2005 - Обръщане на данни без сума / брой и динамичен списък със стойности

Това се доближава до това, което търсите. Включих също скрипт за създаване на таблица и примерни данни, които други да използват. Вдъхновение за това решение дойде от тук

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете стойност навсякъде в база данни

  2. Как да вградите функционалност RUNAS /NETONLY в програма (C#/.NET/WinForms)?

  3. Как правилно и ефективно да използвате повторно подготвен израз в C# .NET (SQL Server)?

  4. Свържете две таблици, използвайте само последната стойност на дясната таблица

  5. Как да задам базата данни по подразбиране в Sql Server от код?