string_agg と for xml path

before Sqlserver2017
select
replace((select Column as [data()] from Table for xml path()),’ ‘,’,’) as CSVcolumn

Sqlserver2017
select
string_agg(Column,’,’) as CSVcolumn from Table

before Sqlserver2017
select
Z.PKcolumn
,Z.columnA
,Z.columnB
,row_number() over (order by Z.columnB asc) Seq
,replace((select Z.columnD as [data()] from Table where Z.PKcolumn=PKcolumn for xml path(”)),’ ‘,’,’) Member
from Table as Z
group by PKcolumn,columnA,columnB

Sqlserver2017
select
Z.PKcolumn
,Z.columnA
,Z.columnB
,row_number() over (order by Z.columnB asc) Seq
,string_agg(Z.columnD,’,’) Member
from Table as Z
group by PKcolumn,columnA,columnB

Null 空文字列

Null でよく勘違いする
SQLserverテーブルでもMYSQLテーブルでも 数値型のカラムにnullを入れることはできる
テーブル設計でnullを許可にすれば良いだけの話

変数にnullを代入するのは不可能な場合もある

VBAでは
dim Var as long
var=null
は不可能、stringはOK stringもだめです
variantだけ可能

ではSQLserverでも同じだろうと思ったら
declare @Var int
set @Var=null
select @Var
とクエリを発行したらNullが返ってきた

では宣言のみで代入なしは?(=初期値?)
SQLserver
declare @Var int
select @Var
は Null
nvarcharでも同様

VBAは複雑
dim Var as long
debug.print Var
はなんと 0

dim Var as string
debug.print Var
は 空白
調べるとこれNullではなく ”” つまり空文字列

役立ちそうにない知識でしょうが一応書き留めておきます