Sql server SQL Server pivot指定的列
我正在努力解决一个查询输出问题。请参见样本数据:Sql server SQL Server pivot指定的列,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我正在努力解决一个查询输出问题。请参见样本数据: CREATE TABLE #Subject (ID INT PRIMARY KEY IDENTITY, Name NVARCHAR(50)) CREATE TABLE #Student (ID INT PRIMARY KEY IDENTITY, Name NVARCHAR(50)) CREATE TABLE #Grade (ID INT PRIMARY KEY IDENTITY, StudentID INT REFERENCES #
CREATE TABLE #Subject (ID INT PRIMARY KEY IDENTITY, Name NVARCHAR(50))
CREATE TABLE #Student (ID INT PRIMARY KEY IDENTITY, Name NVARCHAR(50))
CREATE TABLE #Grade (ID INT PRIMARY KEY IDENTITY,
StudentID INT REFERENCES #Student(ID),
SubjectID INT REFERENCES #Subject(ID),
Grade NVARCHAR(50), GradeText NVARCHAR(50))
INSERT INTO #Subject ( Name ) VALUES
(N'Maths'),
(N'Physics'),
(N'English')
INSERT INTO #Student ( Name ) VALUES
(N'Joe'),
(N'Tom'),
(N'Sally'),
(N'Fred'),
(N'Kim')
INSERT INTO #Grade
( StudentID, SubjectID, Grade, GradeText ) VALUES
(1,1,'Current','A'),
(2,3,'Expected','C'),
(3,2,'Mid','F'),
(4,1,'Final','B'),
(5,2,'Pre','C'),
(2,3,'Start','A'),
(3,1,'Current','A'),
( 1,2,'Expected','B'),
( 4,1,'Final','D'),
( 5,3,'Mid','E')
SELECT * FROM #Student
SELECT * FROM #Subject
SELECT * FROM #Grade
对于等级输出,我想将等级列中的一些重要等级类型设置为它们自己的列。i、 当前的,最终的我想被创建为他们自己的列与相关的成绩,但其他人可以只是列出,因为他们不那么重要。这是一个非常简单的例子,我处理的数据要复杂得多
它们是否可以指定要创建的重要列作为它们自己的列,而其他数据只是按照常规列出?此外,我看到的所有pivot示例都是从一个表中查询的。当您的查询有许多连接时会发生什么情况?您的目标是这样的:
;with x as (
select *
from (
select StudentID, SubjectID, Grade, GradeText, Grade as grade_1, GradeText as GradeText_1
from (
select *
from #Grade
) as x
) as source
pivot (
max(GradeText_1)
for Grade_1 in ([Current], [Final])
) as pvt
)
select sub.Name as Subject, st.Name as Student, Grade, GradeText, [Current], Final
from x
inner join #Subject sub on x.SubjectID = sub.ID
inner join #Student st on x.StudentID = st.ID
感谢您提供的示例数据(我已经清理了一些,以便更好地显示在屏幕上)。你对这些数据的预期结果是什么?是的,我相信这正是我想要的!你能解释一下MAX函数在这种情况下的作用吗?MAX只是选择了最高的数字,不是吗?它在这个场景中是如何应用的?在这个上下文中考虑它是一个NOOP,它只是每行的一个值。根据维基百科的说法,一个“实际上什么都不做的命令”(但仍然需要一个agregate函数)。“无操作”是我遇到的问题的缩写,pivot查询似乎排除了我的一些结果。我的两个列current和expected似乎没有显示,但是当我查询根表并只筛选current或expected时,我可以清楚地看到。这和MAX和null值有关吗?发布代码和示例数据,我不能告诉你们其他的。