我有一个表格,我希望将两个单独的行组合成一行。这是一个产品目录,它将信息存储在不同的行中。以下是样本数据和预期结果。
表名:ProductCatalog
Product_ID | Action | Date
-----------------------------------------
0001 | Added | 12/11/1983
0001 | Removed | 01/01/2003
0002 | Added | 12/11/1983
预期结果:
Product_ID | Added | Removed
========================================
0001 | 12/11/1983 | 01/01/2003
0002 | 12/11/1983 | null
我已尝试加入Product_ID
以便在新的表格或视图中同时显示Added
和Removed
个日期,但我无法获得所需的结果。我没有使用MAX(column)
,因为我没有得到愿望的结果,或者我的分组错误。
答案 0 :(得分:1)
我认为最简单的方法是条件聚合:
select pc.product_id,
max(case when pc.action = 'Added' then pc.[date] end) as Added,
max(case when pc.action = 'Removed' then pc.[date] end) as Removed
from ProductCatalog pc
group by pc.product_id;
您也可以使用pivot
。
答案 1 :(得分:0)
首先,您需要做的是将数据分成两个单独的列,然后将其包含在子选择中并按Product_id
分组,因为只有AddedDate
或{{ 1}}将有价值我们可以使用RemovedDate
函数来显示该数据,每MAX
只生成一行
Product_ID
答案 2 :(得分:0)
尝试类似(伪代码)
Select a.ProductID, a.AddedDate, b.RemovedDate
from table a, table b left outer join on a.ProductId = b.ProductID
where a.tran = "Removed"
答案 3 :(得分:-1)
select * from
(select *from ProductCatalog)p
pivot(max(Date1) for Action1 in ([Added],[Removed]))as pvt