2016-11-29 2 views
0

クエリに別の文字列を作成しようとしています。 LOCATION_ADDR_LINE_2を削除してテストしましたが、クエリは正常に動作します。 DISTINCTを選択しないと、LOCATION_ADDR_LINE_2の値がNULLであることがわかります。 NULLを指定しても、SELECT DISTINCTにこれらの値をどのように集めることができますか?SELECT DISTINCTは、望ましくないときにNULL値を省略しています。

SELECT  DISTINCT(LOCATION_ADDR_LINE_1 + ', ' + LOCATION_ADDR_LINE_2 + ', ' + LOCATION_CITY + ', ' + LOCATION_WORK_STATE) AS Addresses 
FROM  OracleReport 
WHERE  (LOCATION_ADDR_LINE_1 LIKE '%1135 Auto%' OR LOCATION_ADDR_LINE_1 LIKE '%199 Easy%') 

戻り値:

アドレス NULL

SELECT  DISTINCT(LOCATION_ADDR_LINE_1 + ', ' + LOCATION_CITY + ', ' + LOCATION_WORK_STATE) AS Addresses 
FROM  [OperationReport].[dbo].[OracleReport] 
WHERE  (LOCATION_ADDR_LINE_1 LIKE '%1135 Auto%' OR LOCATION_ADDR_LINE_1 LIKE '%199 Easy%') 

戻り値:

アドレス

1135オート...

189-199簡単...値がNULLのときにtext,,text,...(空の文字列を)気にしないと仮定すると、

+0

各値をcoalesce(フィールド、 '')にラップして、NULLを長さゼロの文字列に変更します。ただし、これが動作しないOracleの場合||の代わりに+を使って判断する合体はうまくいくはずですが。 – xQbert

+0

Oracleの場合、NVL() –

+0

これは、Oracleデータから構築されたSQLテーブルに対するSQLクエリです。長い話ですが、それはOracleに直接問い合せる必要のないより大きなマシンの一部です。 –

答えて

1

は...

SELECT DISTINCT(coalesce(LOCATION_ADDR_LINE_1,'') + ', ' +    
       coalesce(LOCATION_ADDR_LINE_2,'') + ', ' + 
       coalesce(LOCATION_CITY,'') + ', ' + 
       coalesce(LOCATION_WORK_STATE,'')) AS Addresses 
FROM OracleReport 
WHERE (LOCATION_ADDR_LINE_1 LIKE '%1135 Auto%' 
    OR LOCATION_ADDR_LINE_1 LIKE '%199 Easy%') 

合体は、最初がかかりますnull以外の値を返し、それを返します。一貫性のあるデータ型が必要であり、一連の最初の非ヌル値に遭遇した場合に早期に終了します。 (詳細はOracle Differences between NVL and Coalesce

+0

以前はこれを使用していませんでしたが、うまくいきました!感謝万円! –

+0

***アタリ7800プラットフォームのスクリーンショットの追加ポイント*** –

+0

技術的にはQ * Bert – xQbert

関連する問題