【问题标题】:DB2 CASE statement and CONCATDB2 CASE 语句和 CONCAT
【发布时间】: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


【解决方案1】:

你可以这样做

SELECT 
    CASE WHEN prefix <> 'C' 
         THEN prefix||suffix 
         ELSE cast (alternate as char(20)) 
    END as Result
FROM table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多