【发布时间】:2017-03-31 21:33:25
【问题描述】:
我在使用 select 语句返回正确信息时遇到问题
表:
prefix | suffix | alternate
------ | ------ | --------
A | 12345 | 0
B | 67890 | 0
C | 0 | 555555
这是我的查询
SELECT
CASE WHEN prefix = 'C' THEN alternate
ELSE CONCAT(prefix, suffix) END as Result
FROM table
我希望看到的结果:
Result
------
A12345
B67890
555555
我实际看到的:
555555
如果我使用此选择取出 CONCAT
SELECT
CASE WHEN prefix = 'C' THEN alternate
ELSE suffix END as Result
FROM table
我得到了我想要的行数,但没有得到正确的列值。我缺少前两行中的前缀。
结果
12345
67890
555555
关于如何在不使用联合复制代码的情况下做到这一点的想法?
Select concat(prefix,suffix) as result from table
union
select alternate as result from table
【问题讨论】:
-
你可以试试:
select prefix || case when prefix = 'C' then combined else suffix end as result from table? -
该查询实际上无法从三行变为仅一行。你确定这是输出吗?
-
这是我得到的实际输出。表列名,结果改了当然是保护无辜的。我只是不明白为什么它不起作用。 CASE 允许您根据 WHEN 中的内容显示不同的列,而 CONCAT 允许将多个列合并为一个。为了清楚起见,我还稍微更改了我的示例。对于每一行,如果前缀是“C”,我想返回组合列中的内容。如果不是 C,我想返回前缀和后缀的 CONCAT。这不可能吗?
-
你为什么不在
SELECT CONCAT(PREFIX, SUFFIX) WHEN PREFIX != 'C'和SELECT ALTERNATE WHEN PREFIX = 'C'之间试试JOIN? -
是的,这很容易,而且您显然走在正确的轨道上。很明显,缺少一条信息。 NULL 可以成为图片的一部分吗?
标签: db2