具有相同值的sql查询合并列

s4n0splo  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(365)

情景如下:
产品名为“a”和 B 上次卖的。现在,这个产品已经合并并改名为“c”
比如说:

CompanyName  ProductName  PurchaseDate  ExpiredDate
CompanyA         A           2016          2017
CompanyA         B           2017          2018
CompanyA         c           2020          2021

同一家公司带来的产品超时,后面的年份状态是特定产品的购买日期和过期日期
然而,现在的产品 A 以及 B 不再出售,合并为产品“c”。所以对于报表显示,总是显示新产品,这是 C 在这种情况下。我尝试如下查询

SELECT * FROM Product CASE WHEN ProductName IN ('A' and 'B') THEN 'C' ELSE ProductName END ProductName

但是,在执行上述操作后,过去的 A 以及 B 已更改为 C 将出现如下重复结果:

CompanyName  ProductName  PurchaseDate  ExpiredDate
CompanyA         C           2016          2017
CompanyA         C           2017          2018
CompanyA         c           2020          2021

所以我在想,这是合并这些行的方法吗?结果可能是这样的 CompanyA C 2016 2021 如果我没有错,在执行合并之后,我必须处理 MIN 以及 MAX

7kqas0il

7kqas0il1#

可以将聚合与 case 表达式:

select (case when productname in ('A', 'B') then 'C' else productname end) as productname,
       min(startyear), max(endyear)
from product
group by (case when productname in ('A', 'B') then 'C' else productname end)
kxxlusnw

kxxlusnw2#

对戈登·林诺夫的建议做了一些修改。

select CompanyName  ,(case when ProductName in ('A', 'B') then 'C' else ProductName end) as ProductName,
       min(PurchaseDate  ) as PurchaseDate   , max(ExpiredDate) as ExpiredDate
from product
group by (case when ProductName in ('A', 'B') then 'C' else ProductName end) ;

相关问题