SQL ServerのOracle WM_CONCAT
と同様の機能が必要です。これは、引数として渡すフィールドのカンマ区切りリストを返します。たとえば、Oracleでは、SQL Serverの文字列へのフィールド値の連結
select WM_CONCAT(first_name) from employee where state='CA'
は "John、Jim、Bob"を返します。
どのようにSQL Serverでこれを行うことができますか?
ありがとうございます
SQL ServerのOracle WM_CONCAT
と同様の機能が必要です。これは、引数として渡すフィールドのカンマ区切りリストを返します。たとえば、Oracleでは、SQL Serverの文字列へのフィールド値の連結
select WM_CONCAT(first_name) from employee where state='CA'
は "John、Jim、Bob"を返します。
どのようにSQL Serverでこれを行うことができますか?
ありがとうございます
AFAIK、あなた自身で行う必要があります。
状態がCAのEmployeeのレコードをカーソルでループし、その名前の連結を返すユーザー定義関数を作成できます。
実際の答え:ここ
SELECT
SUBSTRING(buzz, 2, 2000000000)
FROM
(
SELECT
firstname
FROM
employee
WHERE
State = 'CA'
FOR XML PATH (',')
) fizz(buzz)
一般的な質問。いくつかの検索:
これはSQL Server 2005以降でのみ有効です。 OPは、使用しているSQL Serverのバージョンを明記していません。 –
SUBSTRINGをSTUFFコマンドで置き換えることができます.STUFFコマンドは、文字列の長さを知らなくても正しく機能します。 – WesleyJohnson
@Chris J:SQL 2k5は、SQL 2000 RTMと2.5以降のバージョンの10年後の合理的な前提です。 – gbn
はこれを試してみてください:
drop table #mike_temp
go
select * into #mike_temp
from (select 'Ken' as firstname, 'CO' as state
union all
select 'Mike' as firstname, 'CO' as state
union all
select 'Tom' as firstname , 'WY' as state
) a
go
SELECT distinct
state
,STUFF((SELECT ', ' + b.firstname FROM #mike_temp b where a.state = b.state FOR XML PATH('')),1, 2, '') AS CSVColumn
from #mike_temp a
この
select
wm_concat(name)
from
employee
where
state='CA'
group by
state
を試してみてください
これは正しくありません。 OPが指摘したように、SQL Serverでは動作しません。別のものを意味する場合は、それを削除するか、編集することもできます。 – criticalfix
SELECT Field1, Substring(Field2, 2, LEN(Field2)) AS Field2 FROM
(
SELECT
[InnerData].Field1,
(SELECT ',' + Field2 FROM @Fields WHERE Field1=[InnerData].Field1 FOR XML PATH('')) AS Field2
FROM
(
SELECT DISTINCT Field1 FROM @Fields
) AS [InnerData]
) AS OuterData
私は、このリンクのSQL Server 2017 STRING_AGG機能で
から、このクエリはありません、全然CURSORを使用する必要はありません
SELECT t.name as TableName
,STRING_AGG(c.name, ';') AS FieldList
FROM sys.tables t
JOIN sys.columns c
ON t.object_id = c.object_id
GROUP BY t.name;
を追加されていました。 – gbn