ホームページ > データベース > mysql チュートリアル > 「AGG」関数を使用せずに SQL Server で文字列の集計を実現するにはどうすればよいですか?

「AGG」関数を使用せずに SQL Server で文字列の集計を実現するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-12-26 11:13:16
オリジナル
909 人が閲覧しました

How Can I Achieve String Aggregation in SQL Server Without an 'AGG' Function?

SQL Server のグループ化された文字列集計: 'AGG' の置換

SQL Server には 'AGG に似た組み込みの文字列集計関数がありません' 指定したクエリに含まれています。ただし、行の値をグループ化された結果に連結する別の方法もあります。

1 つのソリューションでは、FOR XML 関数と STUFF 関数を利用します。 FOR XML 関数は、内部クエリの結果を XML に変換します。これを STUFF 関数で処理して、XML タグを削除し、文字列を連結できます。以下に例を示します。

SELECT *, 
(SELECT STUFF((
    SELECT ', ' + CarModel
    FROM CarModels model
    WHERE model.CarMakeID = make.CarMakeID
    FOR XML PATH('')
), 1, 1, '') as CarModels
FROM CarMakes make
ログイン後にコピー

別のアプローチでは、COALESCE 関数と ROW_NUMBER 関数を利用します。 COALESCE 関数は NULL 以外の値を連結し、ROW_NUMBER 関数は各グループ内で一意の行番号を割り当てます。次のクエリでは、このアプローチが使用されています。

SELECT CarMakeID, CarMake,
    COALESCE(
        (
            SELECT CarModel
            FROM CarModels model
            WHERE model.CarMakeID = make.CarMakeID
            AND ROW_NUMBER() OVER (PARTITION BY make.CarMakeID ORDER BY model.CarModelID) = 1
        ),
        '',
        COALESCE(
            (
                SELECT ', ' + CarModel
                FROM CarModels model
                WHERE model.CarMakeID = make.CarMakeID
                AND ROW_NUMBER() OVER (PARTITION BY make.CarMakeID ORDER BY model.CarModelID) > 1
            )
        )
    ) as CarModels
FROM CarMakes make
ログイン後にコピー

これらのアプローチは、SQL Server で文字列をグループ化および連結するための代替方法を提供し、効率的で読みやすいデータ集計を可能にします。

以上が「AGG」関数を使用せずに SQL Server で文字列の集計を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート