【发布时间】:2017-10-09 15:05:46
【问题描述】:
如果您能帮助我解决以下问题,我将不胜感激。 这是我的数据集的非规范化简化模型。它显示学生会话。每个学生每节课可能有 0、1 或 2 名合作学生。 我想从这里出发:
SessionID StudentID Name LastName CoStudent
------------------------------------------------------------------
123 112 John Smith Mary Henderson
123 112 John Smith Chris Jameson
456 571 Panos Kotsos NULL
510 95 Adam Jones Ed Stevenson
850 56 Ed Stevenson Adam Jones
160 401 Mary Henderson John Smith
160 401 Mary Henderson Lucy Smith
..到这里:
SessionID StudentID Name LastName CoStudent1 CoStudent2 NumOfCoStudnts
---------------------------------------------------------------------------------------
123 112 John Smith Mary Henderson Chris Jameson 2
160 401 Mary Henderson John Smith Lucy Smith 2
456 571 Panos Kotsos NULL NULL 0
510 95 Adam Jones Ed Stevenson NULL 1
850 56 Ed Stevenson Adam Jones NULL 1
我认为这可以使用 PIVOT 查询来完成。问题是我实现它的唯一方法是硬编码一个额外的列:CoStud1_2(值'CoStudent1','CoStudent2')。 我是否可以在不添加额外列的情况下或至少通过在运行时创建额外列来获得相同的结果?
谢谢。
克里斯。
DECLARE @STUDENTS TABLE
(
sessionid INT,
studentid INT,
NAME VARCHAR(100),
lastname VARCHAR(100),
costud1_2 VARCHAR(100),
numberofcostudents VARCHAR(100)
)
INSERT INTO @STUDENTS
VALUES
(123,112,'John','Smith','Mary Henderson', 'CoStudent1'),
(123,112,'John','Smith','Chris Jameson', 'CoStudent2'),
(456,571,'Panos','Kotsos',NULL, NULL),
(510,95,'Adam','Jones','Ed Stevenson', 'CoStudent1'),
(850,56,'Ed','Stevenson','Adam Jones', 'CoStudent1'),
(160,401,'Mary','Henderson','John Smith', 'CoStudent1'),
(160,401,'Mary','Henderson','Lucy Smith', 'CoStudent2')
SELECT *,
Count(costudent1) + Count(costudent2) AS NumberOfCoStudents
FROM (-- Query goes here
SELECT *
FROM @STUDENTS) t
PIVOT (Max(costud1_2)
FOR numberofcostudents IN ([CoStudent1],[CoStudent2]) )p
GROUP BY p.sessionid,
p.studentid,
p.NAME,
p.lastname,
p.costudent1,
p.costudent2
【问题讨论】:
标签: sql-server pivot