【发布时间】:2017-09-08 09:58:08
【问题描述】:
我正在尝试执行一条 SQL 语句,该语句从架构中的两个表中选择数据,并使用别名匹配某些值。但是,我在切换案例时遇到了一些困难,需要一些帮助。
表格中的样本数据
Tbl1
列:EID(作为 PK)、站、co、持续时间、时间戳、方向、拨号
数据:
- 1006, 100, 14, 00:01:21, 2017-08-21 09:40:00, O, 1234567890
- 1007, 102, 14, 00:00:14, 2017-08-21 09:53:00, I, RING 00:05
- 1008, 105, 00, 00:00:45, 2017-08-21 09:57:00, E, 100
Tbl2
列:分机(作为 PK)、用户
数据:
- 100,乔肥皂
- 105,苏花
查询:
SELECT log.EID, xtn.user, log.duration, log.direction, log.dialed,
CASE WHEN log.direction = "E" THEN log.dialed = xtn.ext
ELSE log.dialed = log.dialed END
from schema.tbl1 AS log, schema.tbl2 AS xtn
WHERE log.station = xtn.ext
ORDER BY station asc;
预期结果:
- 1006, Joe Soap, 00:01:21, O, 1234567890, 1234567890
- 1007,Bob Caller,00:00:14,我,RING 00:05,RING 00:05
- 1008,Sue Blossom,00:00:45,E,100,Joe Soap
实际结果:
- 1006, Joe Soap, 00:01:21, O, 1234567890, 1
- 1007, Bob Caller, 00:00:14, I, RING 00:05, 1
- 1008, 苏花, 00:00:45, E, 100, 0
问题说明:
SELECT 查询应该从两个表中获取数据,并切换 log.direction 列以检查它是否包含 "E" em>,然后它应该通过在 xtn.ext 列中查找来选择适当的值,并相应地显示 xtn.user 值。
执行时,它正确识别站并将该列替换为用户,但它在最后的列中给出逻辑 1 或 0 值(这表明逻辑正在正确迭代),但不是实际需要的数据。
如果 log.direction 行的值为 E,它应该查找用户名。 如果 log.direction 行值是其他值,它应该显示 log.direction 的原始数据(直到添加将来的实现)。应该省略物理 log.direction 选择,但包含在此示例中是为了展示演示应如何运行。
【问题讨论】:
标签: mysql switch-statement case alias