【问题标题】:Sql Query Merging column with same value具有相同值的Sql查询合并列
【发布时间】:2020-06-25 01:43:58
【问题描述】:

场景如下:

以前销售的产品名为“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

但是,执行上述操作后,AB的过去记录已经变为C,会出现重复结果如下:

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

所以我在想,这是合并这些行的一种方式吗?结果可能是这样的

CompanyA C 2016 2021

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

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

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

    【讨论】:

    • 嗨@GordonLinoff 再次感谢您的回答,总是很简单。简洁明了 :D 但是,你会根据 AziMez 的建议进行更新吗?
    【解决方案2】:

    Gordon Linoff 建议的一些修改。

    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) ;
    

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 2016-05-21
      • 2017-04-23
      • 2022-12-21
      • 1970-01-01
      • 2023-01-06
      • 2022-11-10
      • 2017-11-04
      • 1970-01-01
      相关资源
      最近更新 更多