【发布时间】:2021-08-18 11:45:23
【问题描述】:
我有两张桌子。
加载计划
| LoadNumber | LoadDate | Driver |
|---|---|---|
| 15627 | 2021-08-10 | David |
GpsTable
| LoadNumber | LineNo | AddressCode | AddType |
|---|---|---|---|
| 15627 | 1 | A001 | C |
| 15627 | 2 | A002 | D |
我希望一个表中的 LoadNumber 和 LoadDate 与另一表中的 AddressCode 作为 SourceCode 或 DestinationCode 连接(取决于 AddType 是 C 还是 D)。所以最终的结果是:
| LoadNumber | LoadDate | SourceCode | DestinationCode |
|---|---|---|---|
| 15627 | 2021-08-10 | A001 | A002 |
我尝试过的如下:
select
DISTINCT ls.LoadNumber,
ls.LoadDate,
CASE WHEN gps.AddType = 'C' THEN gps.AddressCode END AS 'SourceGPSCode',
CASE WHEN gps.AddType = 'D' THEN gps.AddressCode END AS 'DestinationGPSCode'
FROM LoadSchedule AS ls INNER JOIN GpsTable as gps ON gps.LoadNumber = ls.LoadNumber
WHERE ls.LoadDate >= '2021-08-10'
结果如下
| LoadNumber | LoadDate | SourceCode | DestinationCode |
|---|---|---|---|
| 15627 | 2021-08-10 | A001 | |
| 15627 | 2021-08-10 | A002 |
然后我尝试使用 GROUP BY 函数将其放在一行中:
select
DISTINCT ls.LoadNumber,
ls.LoadDate,
CASE WHEN gps.AddType = 'C' THEN gps.AddressCode END AS 'SourceGPSCode',
CASE WHEN gps.AddType = 'D' THEN gps.AddressCode END AS 'DestinationGPSCode'
FROM LoadSchedule AS ls INNER JOIN GpsTable as gps ON gps.LoadNumber = ls.LoadNumber
WHERE ls.LoadDate >= '2021-08-10' GROUP BY ls.LoadNumber
但结果显示 DestinationCode 为 (Null)
| LoadNumber | LoadDate | SourceCode | DestinationCode |
|---|---|---|---|
| 15627 | 2020-08-10 | A001 | (Null) |
你能帮我得到如下一行的最终结果吗?
| LoadNumber | LoadDate | SourceCode | DestinationCode |
|---|---|---|---|
| 15627 | 2021-08-10 | A001 | A002 |
【问题讨论】:
标签: mysql case inner-join