2017-03-31 88 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