使用带有内连接的groupby可以获得单列上的唯一记录

时间:2015-11-20 13:10:32

标签: sql-server

我需要colum上的唯一记录a。[id]所以我正在使用组但是它出错了

Msg 8120, Level 16, State 1, Line 3
Column 'dbo.assessment_dfn.name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

查询

SELECT a.[id] AS AssessmentID
  --,ad.[code] AS Assessment_Dfn_Code
  ,ad.[name] AS Assessment_Dfn_name
  ,mdfn.[id] AS Module_Dfn_ID
  ,a.[student_stage]
  ,a.[assessments_sitting]
  ,a.[sitting_date]
  ,ads.[sitting_number]
  ,s.[id] AS StudentID
  ,a.[assessor] AS AssessorID
  ,mdfn.[lead] AS ModuleLead
  ,a.[submission_date]
  ,a.[status]
  ,a.[complete]
  ,a.[assessment]
  ,a.[saved]
  ,ele_cliPro.[grade] AS GradeID
  ,codGrd.[name] AS GradeName


FROM [adb_TestDb].[dbo].[assessments] AS a (NOLOCK)
INNER JOIN [adb_TestDb].[dbo].[student_stage] AS ss ON a.[student_stage] = ss.[id]
INNER JOIN [dbo].[assessment_dfn_sittings] ads WITH (NOLOCK) ON ads.[id] = a.[assessments_sitting]
INNER JOIN [adb_TestDb].[dbo].[students] AS s ON ss.student = s.[id]
INNER JOIN [dbo].[assessment_dfn] ad WITH (NOLOCK) ON ad.[id] = ads.[assessment]
INNER JOIN [dbo].[module_dfn] AS mdfn ON ad.[module] = mdfn.[id]
INNER JOIN [adb_TestDb].[dbo].[elements_clinicalprocedures] AS ele_cliPro ON a.[id] = ele_cliPro.[assessment] 
INNER JOIN [adb_TestDb].[dbo].[codes_grade_details] AS codGrd ON ele_cliPro.[grade] = codGrd.[id] AND codGrd.[id] = 4
where a.id= 2532
group by  a.[id]

1 个答案:

答案 0 :(得分:0)

正如SQL所建议的,如果它们不在该子句或聚合函数中,则在使用GROUP BY时无法获取列。 如果您只需要一条记录并且您知道所有值都相同,那么您可以尝试对所有需要的值使用聚合函数(例如MAX),但只有在您完全意识到只有一个可能的值时才应使用此解决方案值!

相关问题