2017-03-31 16 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を取る場合、私は私がしたい行数ではなく、正しい列値を取得します。最初の2つの行に接頭辞がありません。私は労働組合とのコードを複製せずにこれを行うことができますどのように

結果

12345 
67890 
555555 

思考?

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

のような何かを行うことができます: 'セレクトプリフィックスを||場合は、接頭辞= 'C'その後、他の接尾辞テーブルの結果として末尾に 'を組み合わせた? – zedfoxus

+1

実際には、そのクエリが3つの行から1つの行に移動する方法はありません。それが出力だと確信していますか? – shawnt00

+0

それは私が得ている実際の出力です。テーブルの列名は、無実を保護するために結果が変更されます。なぜそれがうまくいかないのか分かりません。 CASEでは、WHENの内容に基づいて異なる列を表示することができ、複数の列を1つにまとめることができます。私はまた私の例を少しだけ明確にするように変更しました。プレフィックスが "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