ホームページ > データベース > mysql チュートリアル > SQL を使用して列を連結し、データをピボットし、一意の ID と月の組み合わせの合計数をどのように使用できますか?

SQL を使用して列を連結し、データをピボットし、一意の ID と月の組み合わせの合計数をどのように使用できますか?

DDD
リリース: 2025-01-03 18:09:40
オリジナル
654 人が閲覧しました

How can SQL be used to concatenate columns, pivot data, and sum counts for unique ID and month combinations?

SQL を使用した列の連結とデータのピボット

問題:

次のようなデータベースがあります。 ID、タイプ、サブタイプ、数、月を表す列。このデータを、タイプとサブタイプが新しい列に連結され、ID と月の一意の組み合わせごとにカウントが合計される新しい形式に変換するにはどうすればよいですか?

解決策:

この変換された出力を実現するには、SQL Server 2005 の PIVOT 演算子を利用できます。PIVOT 演算子を使用すると、行を動的に転置できます。

次のコード スニペットは、PIVOT を使用して目的の結果を達成する方法を示しています。

DECLARE @sql AS varchar(max)
DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique

SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']'
        ,@select_list = COALESCE(@select_list + ', ', '') + 'ISNULL([' + PIVOT_CODE + '], 0) AS [' + PIVOT_CODE + ']'
FROM (
    SELECT DISTINCT [TYPE] + '_' + SUBTYPE AS PIVOT_CODE
    FROM stackoverflow_159456
) AS PIVOT_CODES

SET @sql = '
;WITH p AS (
    SELECT ID, [MONTH], [TYPE] + ''_'' + SUBTYPE AS PIVOT_CODE, SUM([COUNT]) AS [COUNT]
    FROM stackoverflow_159456
    GROUP BY ID, [MONTH], [TYPE] + ''_'' + SUBTYPE
)
SELECT ID, [MONTH], ' + @select_list + '
FROM p
PIVOT (
    SUM([COUNT])
    FOR PIVOT_CODE IN (
        ' + @pivot_list + '
    )
) AS pvt
'

EXEC (@sql)
ログイン後にコピー

実装の詳細:

  1. 動的ピボット リストの生成: コードは、次のリストを動的に作成します。元のテーブルのタイプとサブタイプの一意の組み合わせに基づいて列をピボットします。
  2. PIVOT クエリの構築: メインの PIVOT クエリは、最初に「p」という名前の共通テーブル式 (CTE) を作成します。データを ID、月、連結されたタイプとサブタイプごとにグループ化します。次に、各グループのカウントを合計します。
  3. 行を列に転置: PIVOT 演算子が CTE "p" に適用され、行を列に転置します。ピボット列リストは、@pivot_list 変数を使用して動的に生成されます。
  4. Null 値の処理 (オプション): COALESCE 関数を使用すると、@select_list 変数の ISNULL() 条件を次のように設定できます。ピボットされた列の null 値を次の値に置き換えるのに使用されます。 zeros.

@sql 変数を実行すると、連結された列と合計カウントを含む目的のテーブルが返されます。このソリューションにより、複雑なデータの効率的かつ動的な集約が可能になります。

以上がSQL を使用して列を連結し、データをピボットし、一意の ID と月の組み合わせの合計数をどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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