Sql 如何将我的order by字段添加到此select语句中?
为了避免“如果指定了select DISTINCT,则ORDER BY items必须出现在select列表中”,我需要在顶部的select语句中添加AssessmentSuperSet.Deadline。我应该在哪里做这个?非常感谢您的帮助。谢谢Sql 如何将我的order by字段添加到此select语句中?,sql,sql-server,Sql,Sql Server,为了避免“如果指定了select DISTINCT,则ORDER BY items必须出现在select列表中”,我需要在顶部的select语句中添加AssessmentSuperSet.Deadline。我应该在哪里做这个?非常感谢您的帮助。谢谢 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF( (SELECT distinct ',' + QUOTENAME(Assessme
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF(
(SELECT distinct ',' + QUOTENAME(AssessmentSuperSet.Title)
from AssessmentSuperSet inner join AssessmentSet on AssessmentSuperSet.SuperSetID = AssessmentSet.SuperSetID
where ClassID = '8KF/En 14/15' order by AssessmentSuperSet.Deadline ASC
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT StudentID, FName, SName, ' + @cols + ' from
(
select KS3Assessments.StudentID,
Pupils.FName,
Pupils.SName,
KS3Assessments.NCLevel,
AssessmentSuperSet.Title
from KS3Assessments inner join Pupils on KS3Assessments.StudentID = Pupils.StudentID
inner join AssessmentSuperSet on KS3Assessments.SuperSetID = AssessmentSuperSet.SuperSetID
where Pupils.GroupDesignation = ''8KF/En 14/15''
) x
pivot (max(NCLevel) for Title in (' + @cols + ') ) p '
execute(@query)
请尝试使用group by子句,而不是distinct:
select @cols = STUFF(
(SELECT ',' + QUOTENAME(AssessmentSuperSet.Title)
from AssessmentSuperSet inner join AssessmentSet on AssessmentSuperSet.SuperSetID = AssessmentSet.SuperSetID
where ClassID = '8KF/En 14/15'
group by AssessmentSuperSet.title, AssessmentSuperSet.Deadline
order by AssessmentSuperSet.Deadline ASC
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT StudentID, FName, SName, ' + @cols + ' from
(
select KS3Assessments.StudentID,
Pupils.FName,
Pupils.SName,
KS3Assessments.NCLevel,
AssessmentSuperSet.Title
from KS3Assessments inner join Pupils on KS3Assessments.StudentID = Pupils.StudentID
inner join AssessmentSuperSet on KS3Assessments.SuperSetID = AssessmentSuperSet.SuperSetID
where Pupils.GroupDesignation = ''8KF/En 14/15''
) x
pivot (max(NCLevel) for Title in (' + @cols + ') ) p '
execute(@query)
由于您没有提供任何合适的测试数据,我没有尝试过。使用DISTINCT通常是您的设计错误的一个指标。就是这样!谢谢。