昨日も同様の質問をしましたが、このロジックが機能する理由についての基本的な理解がまだありません。正しい出力が得られて満足していますが、なぜこのように機能するのでしょうか?
たとえば、次の単純なクエリを使用しているとします。
create table #TestTable (FakeColumn varchar(50))
INSERT INTO #TestTable (FakeColumn) VALUES ('ABC'),('DEF'),('GHI'),('JKL')
DECLARE @columns VARCHAR(8000)
SELECT @columns = COALESCE(@columns + ',[' + cast(FakeColumn as varchar) + ']',
'[' + cast(FakeColumn as varchar)+ ']')
FROM #TestTable
GROUP BY FakeColumn
select @columns
drop table #TestTable
次のクエリの出力は次のとおりです。[ABC],[DEF],[GHI],[JKL]
これはまさに私が必要としているものです...しかし、クエリを次のように変更したとしましょう。
SELECT @columns = '[' + cast(FakeColumn as varchar)+ ']'
FROM #TestTable
GROUP BY FakeColumn
select @columns
- なぜ私の出力は今:
[JKL]
?
そしてCOALESCE
、最初の引数のみを含めるように変更すると [@columns が先頭に追加されます]
SELECT @columns = @columns + ',[' + cast(FakeColumn as varchar) + ']'
FROM #TestTable
GROUP BY FakeColumn
- なぜ私の出力は今:
NULL
?
そのCOALESCEステートメントの最初の値がNULLを返すように見えるため、2番目のステートメントに行く必要がありますが、それは返されるだけ[JKL]
です...しかし、両方を組み合わせると、必要な文字列が得られます...私はそうではありませんこれがどのように機能するのか、またはなぜ機能するのかを確認してください。これを新人に説明できる人はいますか?