0

SQL_GroupByQry

我有以下 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 条记录)。

4

1 回答 1

0

我怀疑你想要:

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'可能不是必需的。
于 2020-05-12T11:23:23.520 回答