27,579
社区成员
发帖
与我相关
我的任务
分享
SELECT * FROM #TempTbl AS p PIVOT (
max(Result) FOR p.DateId IN ([20160125],[20160225])
) AS T
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[Name] NVARCHAR(20)
,[DateId] INT
,Result INT
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'15优先A1',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先A1',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先A2',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先A2',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先A3',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先A3',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先B',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先B',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先C',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先C',20160225,2)
--静态写法 (仅能用于Name 固定的情况)
SELECT DateId
,SUM(CASE WHEN Name='15优先A1' THEN Result ELSE 0 END) AS [15优先A1]
,SUM(CASE WHEN Name='15优先A2' THEN Result ELSE 0 END) AS [15优先A2]
,SUM(CASE WHEN Name='15优先A3' THEN Result ELSE 0 END) AS [15优先A3]
,SUM(CASE WHEN Name='15优先B' THEN Result ELSE 0 END) AS [15优先B]
,SUM(CASE WHEN Name='15优先C' THEN Result ELSE 0 END) AS [15优先B]
FROM t
GROUP BY [DateId]
--动态写法
DECLARE @sql NVARCHAR(MAX)
SET @sql='SELECT DateId'
+(SELECT ',SUM(CASE WHEN Name='''+NAME+''' THEN Result ELSE 0 END) AS ['+t.Name+']' FROM t GROUP BY NAME FOR XML PATH(''))
+' FROM t
GROUP BY [DateId]
'
PRINT @sql
EXEC(@sql)
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[Name] NVARCHAR(20)
,[DateId] INT
,Result INT
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'15优先A1',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先A1',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先A2',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先A2',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先A3',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先A3',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先B',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先B',20160225,2)
INSERT INTO dbo.[t] VALUES(N'15优先C',20160125,1)
INSERT INTO dbo.[t] VALUES(N'15优先C',20160225,2)
DECLARE @sql VARCHAR(MAX)
SET @sql = 'select DateId'
SELECT @sql = @sql + ',max(case Name when ''' + RTRIM(Name)
+ ''' then Result else 0 end)[' + RTRIM(Name) + ']'
FROM ( SELECT DISTINCT
[Name]
FROM T
) a
SET @sql = @sql
+ ' from T group by DateId'
EXEC(@sql)