2017-01-20 11 views
2

別のデータベースから一度だけデータをインポートできるようにいくつかのビューを構築しています。ソーステーブルには長さがゼロの文字列があります(NULLNULLIFで変換します)が、アドレスによって問題が発生しています。フィールドは連結されていますがNULLはありません

サンプルソーステーブル。

IF OBJECT_ID('tempdb..#OriginalDataTable') IS NOT NULL DROP TABLE #OriginalDataTable 
GO 
CREATE TABLE #OriginalDataTable (RowID int, Address1 varchar(20), Address2 varchar(20), Address3 varchar(20), City varchar(10), State varchar(10)) 
INSERT INTO #OriginalDataTable (RowID, Address1, Address2, Address3, City, State) 
VALUES 
(1, '1 Wall Street','Downtown','','New York','NY') 
,(2, '2 Floor Street','Uptown','','New York','NY') 
,(3, '','','','','') 
,(4, '3 Ceiling Street','','','New York','NY') 

現時点では、各行のCASEに傾いていますが、効率的ではありません。誰もこれのためのより良い選択肢を提案することはできますか?

SELECT 
Address1 + ', ' + Address2 + ', ' + Address3 + ', ' + City + ', ' + State [Easy_But_Wrong] 
,NULLIF(Address1 + 
CASE WHEN Address2 = '' THEN '' ELSE ', ' + Address2 END + 
CASE WHEN Address3 = '' THEN '' ELSE ', ' + Address3 END + 
CASE WHEN City = '' THEN '' ELSE ', ' + City END + 
CASE WHEN State = '' THEN '' ELSE ', ' + State END ,'') [Using_CASE] 
FROM #OriginalDataTable 

ビューに組み込む必要があるので、ウィンドウからいくつかの方法を取り除く必要があります。

この私の現在の出力は、私が最初の列にカンマに気づく(それは右のデータのように見えるしたい。

Easy_But_Wrong        Using_CASE 
1 Wall Street, Downtown, , New York, NY  1 Wall Street, Downtown, New York, NY 
2 Floor Street, Uptown, , New York, NY  2 Floor Street, Uptown, New York, NY 
, , , ,          NULL 
3 Ceiling Street, , , New York, NY   3 Ceiling Street, New York, NY 
+0

"アドレスが私に問題を引き起こしています。"あなたがここで直面している問題は何ですか? –

+0

@ChetanRanpariya私はそれらの間に値のないカンマを表示したくありません。私は質問を更新します。 –

+1

@RichBennerでは、 'NULLIF'アプローチを' ISNULL/COALESCE'ソリューションと組み合わせることができます。これで問題は解決しますか? – Shnugo

答えて

1

これはおそらくthis questionの複製です。

I

SELECT 
    Stuff(
    Coalesce(',' + NULLIF(Address1,''),'') 
    + Coalesce(',' + NULLIF(Address2,''),'') 
    + Coalesce(',' + NULLIF(Address3,''),'') 
    + Coalesce(',' + NULLIF(City,''),'') 
    + Coalesce(',' + NULLIF(State,''),'') 
    , 1, 1, '') [New_Address] 
FROM #OriginalDataTable 

結果;

「、所望の出力を得るために組み合わさ NULLIFとそのアプローチをVEの210
New_Address 
1 Wall Street,Downtown,New York,NY 
2 Floor Street,Uptown,New York,NY 
NULL 
3 Ceiling Street,New York,NY 
関連する問題