sql - 具有相同值的Sql查询合并列
问题描述
场景如下:
有两种产品名为“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
解决方案
您可以将聚合与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)
推荐阅读
- c# - 如何在同一类中使用 Android.App.Application 和 Xamarin.Forms.Application?
- python - 用csv写两个字典
- node.js - 在 node.js 中设置 mssql-session-store
- twitter-bootstrap - 如何在滑块中垂直对齐推荐的最佳实践是什么
- java - 运行应用程序后的android studio错误
- rust - 为什么 Rust 将 const 从 trait 分配到 trait 不起作用?
- mysql - MySQL中另一个表中的表
- php - 如何为 JSON 值设置动态日期?
- python-3.x - ImportError:没有名为“vaderSentiment”的模块
- java - 带有嵌套对象的 Java 谓词链接