我正在观察不同品种的牛,以及它们的AnimalTypeCode
、BreedCateoryID
和由此产生的Growth
。
我有以下查询
SELECT DATEPART(yyyy,[KillDate])
,[AnimalTypeCode]
,AVG([Growth])
,[BreedCategoryID]
FROM [dbo].[tblAnimal]
WHERE (AnimalTypeCode='C'
or AnimalTypeCode= 'E')
GROUP BY DATEPART(yyyy,[KillDate])
,[AnimalTypeCode]
,[BreedCategoryID]
GO
这个查询很好,给了我几乎我想要的东西,但是BreedCategoryID
编号从1到7,我想对它们进行分组:
(1 = Pure Dairy),
(2 and 3 = Dairy)
(4, 5, 6 and 7 = Beef)
因此,我不想得到每个BreedCategoryID
的平均BreedCategoryID
,而是要得到纯乳制品、乳制品和牛肉的平均值。
任何帮助都非常感谢!
发布于 2020-09-02 17:39:02
您可以在cross apply
子句中使用from
分配一个新的“变量”:
SELECT YEAR(KillDate]), a.AnimalTypeCode, v.grp,
AVG([Growth])
FROM [dbo].[tblAnimal] a CROSS APPLY
(VALUES (CASE WHEN a.BreedCategoryID IN (1) THEN 'Pure Dairy'
WHEN a.BreedCategoryID IN (2, 3) THEN 'Dairy'
WHEN a.BreedCategoryID IN (4, 5, 6, 7) THEN 'Beef'
END)
) as v(grp)
WHERE a.AnimalTypeCode IN ('C', 'E')
GROUP BY YEAR(KillDate]), a.AnimalTypeCode, v.grp;
注意,我还引入了表别名,并对所有列引用进行了限定。
发布于 2020-09-02 17:59:01
在派生表(子查询)中进行计算。GROUP BY
的结果:
select killyear, [AnimalTypeCode], AVG([Growth]), BreedCat
(
SELECT DATEPART(yyyy,[KillDate]) killyear
,[AnimalTypeCode]
,[Growth]
,case when [BreedCategoryID] = 1 then 'Pure Dairy'
when [BreedCategoryID] in (2, 3) then 'Dairy'
when [BreedCategoryID] in (4, 5, 6, 7) then 'Beef'
end BreedCat
FROM [dbo].[tblAnimal]
WHERE (AnimalTypeCode='C'
or AnimalTypeCode= 'E')
) dt
GROUP BY killyear
,[AnimalTypeCode]
,BreedCat
https://stackoverflow.com/questions/63710817
复制相似问题