Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server pivot指定的列_Sql Server_Sql Server 2012 - Fatal编程技术网

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值有关吗?发布代码和示例数据,我不能告诉你们其他的。