我有以下T-SQL查询。
SELECT
CASE
WHEN ap.Brand = 'T' THEN 'Toyota'
WHEN ap.BRAND = 'L' THEN 'Lexus'
ELSE 'Both'
END AS Brand, av.Name, YEAR(ap.Last_update_date) AS YEAR, MONTH(ap.Last_update_date) AS MONTH, COUNT(an.Id) AS COUNT FROM AimNotifications an
INNER JOIN AIM_PUBS ap ON ap.GUID = an.Publication_Id
INNER JOIN AIM_PUB_X_VEHICLE apv ON apv.AIM_PUB_ID = ap.GUID
INNER JOIN AIM_VEHICLES av on apv.VEHICLE_ID = av.Id
WHERE DATEPART(MONTH, ap.Last_update_date) = 4
GROUP BY av.Name, an.Id, YEAR(ap.Last_update_date), MONTH(ap.Last_update_date), ap.Brand
ORDER BY 3 DESC, 4 DESC, 2 ASC, 1 DESC
这给了我如附图所示的结果.但我仍然需要为相同的记录做另一个GROUP BY(例如:像前7条记录)。
我怀疑你想。
SELECT (CASE WHEN MAX(op.Brand) = MIN(ap.Brand) THEN MAX(ap.Brand) ELSE 'Both' END) as brand,
av.Name, YEAR(ap.Last_update_date) AS YEAR, MONTH(ap.Last_update_date) AS MONTH,
COUNT(an.Id) AS COUNT
FROM AimNotifications an JOIN
AIM_PUBS ap
ON ap.GUID = an.Publication_Id JOIN
AIM_PUB_X_VEHICLE apv
ON apv.AIM_PUB_ID = ap.GUID JOIN
AIM_VEHICLES av
ON apv.VEHICLE_ID = av.Id
WHERE DATEPART(MONTH, ap.Last_update_date) = 4 AND
AP.Brand IN ('L', 'T')
GROUP BY av.Name, YEAR(ap.Last_update_date), MONTH(ap.Last_update_date)
ORDER BY 3 DESC, 4 DESC, 2 ASC, 1 DESC;
这直接解决了你的查询问题,而不需要另一个层次的聚合。
注意事项。
Brand
来自 GROUP BY
.id
来自 GROUP BY
.Brand
所以你可以得到 "两者"。'L'
和 'T'
-- 如果您的数据中只有这些品牌,可能就没有必要了。