DB2 CASE语句和CONCAT

DB2 CASE语句和CONCAT,db2,Db2,我无法用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 Re

我无法用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
思考如何在不使用union复制代码的情况下实现这一点

Select concat(prefix,suffix) as result from table
union
select alternate as result from table

你可以这样做

SELECT 
    CASE WHEN prefix <> 'C' 
         THEN prefix||suffix 
         ELSE cast (alternate as char(20)) 
    END as Result
FROM table
选择
前缀“C”时的大小写
然后加上前缀| |后缀
ELSE cast(替换为char(20))
结果
从桌子上

您可以这样做

SELECT 
    CASE WHEN prefix <> 'C' 
         THEN prefix||suffix 
         ELSE cast (alternate as char(20)) 
    END as Result
FROM table
选择
前缀“C”时的大小写
然后加上前缀| |后缀
ELSE cast(替换为char(20))
结果
从桌子上

您可以尝试:
选择prefix | | case当prefix='C'然后组合其他后缀作为表的结果结束吗
?该查询实际上无法从三行转到一行。你确定那是输出吗?那是我得到的实际输出。表的列名、结果的更改当然是为了保护无辜。我只是不明白为什么它不起作用。CASE允许您根据中的内容显示不同的列,而CONCAT允许将多个列合并为一个列。为了清楚起见,我还稍微改变了我的例子。对于每一行,如果前缀是“C”,我想返回组合列中的内容。如果不是C,我想返回前缀和后缀的CONCAT。这是不可能的吗?当前缀为时,为什么不尝试在
选择CONCAT(前缀,后缀)之间加入
JOIN
C'
和a
在前缀为'C'
时选择ALTERNATE?是的,这很容易,而且你显然走对了方向。显然有一条信息丢失了。空值可能是图片的一部分吗?您可以尝试:
选择prefix | | case when prefix='C',然后组合else后缀作为表的结果结束吗
?该查询实际上无法从三行转到一行。你确定那是输出吗?那是我得到的实际输出。表的列名、结果的更改当然是为了保护无辜。我只是不明白为什么它不起作用。CASE允许您根据中的内容显示不同的列,而CONCAT允许将多个列合并为一个列。为了清楚起见,我还稍微改变了我的例子。对于每一行,如果前缀是“C”,我想返回组合列中的内容。如果不是C,我想返回前缀和后缀的CONCAT。这是不可能的吗?当前缀为时,为什么不尝试在
选择CONCAT(前缀,后缀)之间加入
JOIN
C'
和a
在前缀为'C'
时选择ALTERNATE?是的,这很容易,而且你显然走对了方向。显然有一条信息丢失了。空值可能是图片的一部分吗?