2017-03-31 75 views
-2

我无法返回正确的信息与我的select语句DB2 CASE语句和CONCAT

表:

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 

,如果我用这个选择

SELECT 
     CASE WHEN prefix = 'C' THEN alternate 
     ELSE suffix END as Result 
FROM table 

我得到的行数我想但不正确的列值取出CONCAT。我在前两行中缺少前缀。

结果

12345 
67890 
555555 

思考我如何能做到这一点,而无需复制代码与工会?

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

你可以试试:'选择前缀|| case prefix ='C'then then combined suffix end as result from table'? – zedfoxus

+1

这个查询真的没有办法从三行到一行。你确定这是输出吗? – shawnt00

+0

这是我得到的实际输出。表列名称,结果被改变以保护无辜当然。我只是不明白为什么它不起作用。 CASE允许您根据WHEN和CONCAT允许将多个列合并为一个的内容来显示不同的列。我也改变了我的例子有点清楚。对于每一行,如果前缀是“C”,我想返回组合列中的内容。如果它不是C,我想返回CONCAT的前缀和后缀。这不可能吗? – Joel

回答

2

你可以做这样的事情

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

这工作!谢谢! – Joel