繁体   English   中英

如何将 case 表达式和 min() 与 group by 一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM