[英]How to use case expression and min() with group by
当我执行以下查询时
SELECT St.FirstName,St.LastName,
CASE
WHEN St.ISPackage='N' THEN Min(St.VisitingDate)
WHEN St.ISPackage='Y' THEN St.VisitingDate
END AS VisitingDate
FROM SalesTransaction As St
(...inner join and where clause)
GROUP BY St.FirstName,St.LastName, St.VisitingDate
如果我在Group By
使用 St.VisitingDate 结果是重复的。
如果未在Group By
使用 St.VisitingDate 显示错误
在选择列表中无效,因为它不包含在聚合函数中
我怎么解决这个问题?
我怀疑您想按名称分组并在ISPackage
为“Y”时ISPackage
访问日期,如果没有ISPackage
为“Y”的日期,则ISPackage
最早的访问日期。
如果是这样,你可以这样做:
SELECT St.FirstName,St.LastName,
COALESCE(MIN(CASE WHEN St.ISPackage = 'Y' THEN St.VisitingDate END), MIN(St.VisitingDate)) VisitingDate
FROM SalesTransaction As St
-- (...inner join and where clause)
GROUP BY St.FirstName,St.LastName
您可以使用以下 SQL-我使用子查询计算最小日期。
SELECT St.FirstName,St.LastName,
CASE
WHEN St.ISPackage='Y' THEN St.VisitingDate
ELSE min_dt.min_VisitingDate
END AS VisitingDate
FROM
SalesTransaction As St
(...inner join and where clause)
left join (select St.FirstName,St.LastName, min(St.VisitingDate) min_VisitingDate from SalesTransaction group by St.FirstName,St.LastName) min_dt
ON St.FirstName =min_dt.FirstName ,St.LastName =min_dt.LastName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.