首页 > 解决方案 > 具有相同值的Sql查询合并列

问题描述

场景如下:

有两种产品名为“A”,B并且之前销售过。如今,该产品已经合并并更名为“C”

比如说:

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

同一家公司带来的产品超时,后面的年份状态是特定产品的购买日期和过期日期

但是,现在产品AB不再销售,合并为产品“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

如果我没记错的话,在执行合并后,我必须处理MINMAX

标签: sqlsql-servertsql

解决方案


您可以将聚合与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) 

推荐阅读