如何将case表达式和min与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.VisitingDate

如果我在Group By中使用St.VisitingDate,则结果将重复。

如果Group By中未使用St.VisitingDate,则会显示错误

在选择列表中无效,因为它既不在聚合函数中也不包含

我该如何解决这个问题?

解决方法

怀疑您要按名称分组并在ISPackage为“ Y”时获得访问日期,如果没有{{ 1}}是“ Y”。

如果是这样,您可以这样做:

ISPackage
,

您可以在下面的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,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