使用一个列数据在表中组合两行

时间:2014-03-16 23:52:57

标签: sql sql-server sql-server-2008

我有一个表格,我希望将两个单独的行组合成一行。这是一个产品目录,它将信息存储在不同的行中。以下是样本数据和预期结果。

表名: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以便在新的表格或视图中同时显示AddedRemoved个日期,但我无法获得所需的结果。我没有使用MAX(column),因为我没有得到愿望的结果,或者我的分组错误。

4 个答案:

答案 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