2024-11-25 16:33:11
2024-11-25 15:28:57
你这是行转列... 我现在需要的是行转列,列转成行...
还有一点我需要的是2000的语法...
例如:如题:例如我有一个表tb_A(编号,姓名,学科,分数)
记录如下:
001 小李 数学 100
001 小李 语文 88
001 小李 英语 99
002 小张 数学 60
002 小张 语文 60
002 小张 英语 60
按照你的方法显示的结果是:
字段名: 编号 姓名 数学 语文 英语 数学 语文 英语
001 小李 100 88 99 100 88 99
001 小张 60 60 60 60 60 60
我想要的现实结果是:
字段名: 编号 姓名 数学 语文 英语
001 小李 100 88 99
001 小张 60 60 60
怎样实现?
解决:
IF NOT OBJECT_ID('成绩表') IS NULL
DROP TABLE 成绩表
GO
CREATE TABLE [成绩表] (
[编号] NVARCHAR(10),
[姓名] NVARCHAR(10),
[学科] NVARCHAR(10),
[分数] INT)
GO
INSERT INTO [成绩表]
SELECT N'001',N'小李',N'数学',100 UNION
SELECT N'001',N'小李',N'语文',88 UNION
SELECT N'001',N'小李',N'英语',99 UNION
SELECT N'002',N'小张',N'数学',60 UNION
SELECT N'002',N'小张',N'语文',60 UNION
SELECT N'002',N'小张',N'英语',60
DECLARE @Sql NVARCHAR(4000)
SET @Sql = ''
SELECT @Sql = @Sql + ',' + QUOTENAME([学科]) + '=MAX(CASE WHEN [学科]=' + QUOTENAME([学科], '''') + ' THEN [分数] ELSE 0 END)'
FROM 成绩表
GROUP BY [学科]
EXEC ('SELECT [编号], [姓名]' + @SQL + ' FROM [成绩表] GROUP BY [编号], [姓名]')
2024-11-25 21:02:35
2024-11-25 11:33:43