如何在2个表之间正确显示值

问题描述 投票:0回答:1

我有两张桌子,我试图从中显示平面视图。

我有表 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     |           |
sql t-sql
1个回答
0
投票

您可以使用

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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.