我有两张桌子,我试图从中显示平面视图。
我有表 A 和产品代码,表 B 包含该代码和一列状态代码(完成、未完成、处理中)。该状态具有与其产品代码关联的日期/时间。
当我加入代码时,我会得到所有代码,无论它们是否有日期时间。假设日期时间代码存在,如何将产品代码、DoneDateTime、InProcessDateTime、NotDoneDateTime 在其自己的列中显示为单个平面视图?
Table A
| ProdCode |
| -------- |
| 111 |
| 222 |
| 223 |
表B
| ProdCode | Status | Date |
| -------- | ------ |-------|
| 111 | Done |1/10/01|
| 111 | Start |1/1/01 |
| 222 | Done | |
| 222 | Start |1/2/01 |
所需景观
| ProdCode | Start Date | Done Date |
| -------- | ---------- |-----------|
| 111 | 1/1/01 |1/10/01 |
| 222 | 1/2/01 | |
您可以使用
conditional aggregation
作为一种方法。我认为你想要所有的产品代码,即使是那些还没有开始的产品代码,因此需要左连接。
select
a.prodCode,
max(case when b.status = 'Start' then Date end) as start_date,
max(case when b.status = 'Done' then Date end) as end_date
from
tableA a
left join
tableB b
on a.prodCode = b.prodCode
group by a.prodCode
order by 1
产品代码 | 开始日期 | 结束日期 |
---|---|---|
111 | 2001-01-01 | 2001-01-10 |
222 | 2001-01-02 | 空 |
223 | 空 | 空 |