2016-07-15 9 views
0

私が使用しているクエリでは、ローが返されない場合(出力がダウンストリームで使用されるため)、デフォルト値を返す必要があります。私が遭遇している問題は、クエリが 'デフォルト'の値を使用することを知るように、ゼロまたはヌルの行が返されることをプログラムで識別する方法です。クエリがDB2のローを返さない場合のデフォルト値の返却

SELECT DISTINCT fieldName from DB2Table 
WHERE qualifier1 = '___' 
AND qualifier2 = '___'; 

これは、値を返すことも、何も返さないこともできます(行はまったくありません)。私は、CASE文の中でcount(*)、NOT NULL、EXISTS()を使用しようとしましたが、運がなかった。

**Psuedocode**: 
IF query returns values, return those 
ELSE return "Some Value" 

ヒント/洞察力があれば幸いです。

+0

SQL文を実行しているアプリケーションは実行できません'select'ステートメントによって返された* 0行が存在し、適切に動作していることを確認します。 –

答えて

0

クエリがない場合行を返し、その場合はデフォルト値を返す必要があります。

SELECT 
COALESCE(
      (SELECT DISTINCT fieldName from DB2Table 
      WHERE qualifier1 = '___' AND qualifier2 = '___'), 'DEFAULTVALUE' 
     ) 
FROM sysibm.sysdummy1 
+0

"sysibm.sysdummy1から"をクエリーに追加すると機能します。 – KingPojo

+0

大丈夫です。それをクエリに追加しました。 –

+0

ありがとうございます!これは大きな助けとなりました。 – KingPojo

0

あなたが一列のみを期待している場合は、集約を使用します。あなたはここで、複数の行を取得することができれば

SELECT COALESCE(fieldName, 'DEFAULT VALUE') 
FROM DB2Table 
WHERE qualifier1 = '___' AND qualifier2 = '___'; 

する別の方法である:

WITH t as (
     SELECT fieldName 
     FROM DB2Table 
     WHERE qualifier1 = '___' AND qualifier2 = '___' 
    ) 
SELECT t.* 
FROM t 
UNION ALL 
SELECT 'DEFAULT VALUE' 
FROM sysibm.sysdummy1 
WHERE NOT EXISTS (SELECT 1 FROM t); 
関連する問題