2
別のデータベースから一度だけデータをインポートできるようにいくつかのビューを構築しています。ソーステーブルには長さがゼロの文字列があります(NULL
にNULLIF
で変換します)が、アドレスによって問題が発生しています。フィールドは連結されていますが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
"アドレスが私に問題を引き起こしています。"あなたがここで直面している問題は何ですか? –
@ChetanRanpariya私はそれらの間に値のないカンマを表示したくありません。私は質問を更新します。 –
@RichBennerでは、 'NULLIF'アプローチを' ISNULL/COALESCE'ソリューションと組み合わせることができます。これで問題は解決しますか? – Shnugo