如何在SQL Server中使用别名按多个列分组?
从一些旧代码中获取了一个查询,我正在努力使它正常工作。每次提交查询时,都会出现以下错误: 错误代码207,SQL状态S0001:列名“Grade”无效 代码:如何在SQL Server中使用别名按多个列分组?,sql,sql-server,Sql,Sql Server,从一些旧代码中获取了一个查询,我正在努力使它正常工作。每次提交查询时,都会出现以下错误: 错误代码207,SQL状态S0001:列名“Grade”无效 代码: 选择 计数(*)为计件计数 ,shifttimes.shiftid作为shiftid ,specienames.NameText作为物种 ,gradenames.NameText作为年级 干蕨属 ,CreatedLocal 从…起 表、移位时间、物种名称、等级名称 哪里 sheets.ShiftIndex=shifttimes.Shift
选择
计数(*)为计件计数
,shifttimes.shiftid作为shiftid
,specienames.NameText作为物种
,gradenames.NameText作为年级
干蕨属
,CreatedLocal
从…起
表、移位时间、物种名称、等级名称
哪里
sheets.ShiftIndex=shifttimes.ShiftIndex
和sheets.SpecieNameIndex=specienames.NameIndex
和sheets.gradenameindex=gradenames.NameIndex
和CreatedLocal>=“2015-04-01”
和CreatedLocal<'2015-06-01'
分组
希夫蒂德,等级,干燥,品种
对于错误,我认为您应该更改
GROUP BY ShiftId
,Grade
,DryerNum
,Specie
到
注意:
在您的选择中,您有,创建本地,但不在您的分组依据中,您必须将其从选择中删除或包含在分组依据中
建议:
尝试使用别名和隐式联接(from子句中有两个表)是一种不推荐使用的语法,建议切换到现代的显式语法:
SELECT COUNT(*) AS PieceCount
,ST.shiftid AS ShiftId
,SN.NameText AS Specie
,GN.NameText AS Grade
,DryerNum
FROM
sheets S
inner join shifttimes ST
ON S.ShiftIndex = ST.ShiftIndex
inner join Specienames SN
ON S.SpecieNameIndex = SN.NameIndex
inner join GradeNames GN
ON S.gradenameindex = GN.NameIndex
WHERE
CreatedLocal >= '2015-04-01'
AND CreatedLocal < '2015-06-01'
GROUP BY
ST.shiftid
,GN.NameText
,DryerNum
,SN.NameText
选择计数(*)作为计件计数
,ST.shiftid AS shiftid
,SN.NameText作为种类
,GN.NameText作为年级
干蕨属
从…起
床单
内连接移位时间
在S.ShiftIndex=ST.ShiftIndex上
内连接物种SN
关于S.SpecieNameIndex=SN.NameIndex
内部连接等级名称
在S.gradenameindex=GN.NameIndex上
哪里
CreatedLocal>=“2015-04-01”
和CreatedLocal<'2015-06-01'
分组
圣希夫蒂德
,GN.NameText
干蕨属
,SN.NameText
对于错误,我认为您应该更改
GROUP BY ShiftId
,Grade
,DryerNum
,Specie
到
注意:
在您的选择中,您有,创建本地,但不在您的分组依据中,您必须将其从选择中删除或包含在分组依据中
建议:
尝试使用别名和隐式联接(from子句中有两个表)是一种不推荐使用的语法,建议切换到现代的显式语法:
SELECT COUNT(*) AS PieceCount
,ST.shiftid AS ShiftId
,SN.NameText AS Specie
,GN.NameText AS Grade
,DryerNum
FROM
sheets S
inner join shifttimes ST
ON S.ShiftIndex = ST.ShiftIndex
inner join Specienames SN
ON S.SpecieNameIndex = SN.NameIndex
inner join GradeNames GN
ON S.gradenameindex = GN.NameIndex
WHERE
CreatedLocal >= '2015-04-01'
AND CreatedLocal < '2015-06-01'
GROUP BY
ST.shiftid
,GN.NameText
,DryerNum
,SN.NameText
选择计数(*)作为计件计数
,ST.shiftid AS shiftid
,SN.NameText作为种类
,GN.NameText作为年级
干蕨属
从…起
床单
内连接移位时间
在S.ShiftIndex=ST.ShiftIndex上
内连接物种SN
关于S.SpecieNameIndex=SN.NameIndex
内部连接等级名称
在S.gradenameindex=GN.NameIndex上
哪里
CreatedLocal>=“2015-04-01”
和CreatedLocal<'2015-06-01'
分组
圣希夫蒂德
,GN.NameText
干蕨属
,SN.NameText
请检查这里与Java无关。标签已编辑。-在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表列表样式被正确的ANSIJOIN
语法所取代,它的使用不受欢迎。请检查这里与Java无关。标签已编辑。-在ANSI-92 SQL标准(20多年前)中,旧样式的逗号分隔表列表样式被正确的ANSIJOIN
语法所取代,因此不鼓励使用它。groupby
子句不能使用SELECT
列表中定义的列别名。从逻辑/流程流的角度来看,分组发生在选择之前。同样是,聚合查询的选择列表必须只列出分组列和/或组的函数(尽管某些数据库允许其他列作为扩展)。是。groupby
子句不能使用SELECT
列表中定义的列别名。从逻辑/流程流的角度来看,分组发生在选择之前。同样,聚合查询的select列表必须只列出分组列和/或组的函数(尽管某些数据库允许其他列作为扩展)。