複数のレコードを使用して動的列のピボットクエリを作成するにはどうすればよいですか?

Tomo

EDIT2:私は新しい使用可能な例を作成し、次のステップに到達しましたが、それでもいくつかのことを行う方法についての手がかりがありません。お会計お願いします。

以下の表があります。

CREATE TABLE [dbo].[MyTable] (
             [ID] [int] IDENTITY(1,1) NOT NULL
            ,[Name] [nvarchar](50) NULL
            ,[Quantity] [int] NULL
            ,[Period] [nvarchar](10) NULL
            )

INSERT [dbo].[MyTable] VALUES
      ('foo', 1, 'Jan'),
      ('bar', 2, 'Jan'),
      ('foo', 1, 'Jan'),
      ('kin', 1, 'Jan'),
      ('blat', 5, 'Jan'),
      ('foo', 3, 'Feb'),
      ('bar', 1, 'Feb'),
      ('kin', 2, 'Feb'),
      ('blat',4, 'Feb'),
      ('foo', 1, 'Feb'),
      ('kin', 7, 'Feb'),
      ('blat', 1, 'Feb'),
      ('foo', 3, 'Mar'),
      ('bar', 1, 'Mar'),
      ('kin', 1, 'Mar'),
      ('blat', 1, 'Mar'),
      ('bar', 1, 'Mar'),
      ('kin', 2, 'Mar'),
      ('blat', 3, 'Mar')

そして、クエリでPIVOTを使用して、写真の結果を達成したいと思います。

ここに画像の説明を入力してください

これまでの私の質問:

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N', p.' + QUOTENAME(Period)
  FROM (SELECT Period FROM dbo.MyTable AS p
  GROUP BY Period) AS x;
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
  SELECT Name, Period, Quantity
   FROM dbo.MyTable AS p
) AS j
PIVOT
(
  SUM(Quantity) FOR Period IN ('
  + STUFF(REPLACE(@columns, ', p.[', ',['), 1, 1, '')
  + ')
) AS p;';
EXEC sp_executesql @sql;

以下の結果が得られます。

ここに画像の説明を入力してください

行名(foo、bar、kin、blat)、列名Name、SUMなどを追加するにはどうすればよいですか?

EDIT3:列とレコードを「注文する」方法は?

ロネン・アリエリー

こんにちはトモ、

テーブルを作成してデータを挿入するためのクエリができたので、簡単かつ迅速に支援できます:-)

以下のソリューションがニーズに合っているかどうかを確認してください

select [Name],[Jan],[Feb],[Mar],[Jan]+[Feb]+[Mar] AS Grand_Total
from (
    SELECT [Name], [Quantity],[Period]
    FROM [MyTable]
) src
pivot
(
  SUM(Quantity)
  for Period in ([Jan],[Feb],[Mar])
) piv
GO

次のステップは、動的PIVOTが必要な場合に、静的ソリューションを取得したら非常に簡単な動的PIVOTに変換することですが、最初に静的PIVOTが必要なものを返し、実際に動的ソリューションが必要であることを確認します(おそらくこれはニーズに合っています)そのまま)

更新:ROLLUPを使用して下部に「総計」を追加

;With MyCTE as(
select [Name],[Jan],[Feb],[Mar],[Jan]+[Feb]+[Mar] AS Grand_Total
from (
    SELECT [Name], [Quantity],[Period]
    FROM [MyTable]
) src
pivot
(
  SUM(Quantity)
  for Period in ([Jan],[Feb],[Mar])
) piv
)
select ISNULL([Name],'Totoal') as Name ,SUM([Jan]) [Jan],SUM([Feb]) [Feb],SUM([Mar]) [Mar],SUM([Grand_Total]) [Grand_Total]
from MyCTE
GROUP BY ROLLUP ([Name])
GO

OPが要求したようにDynamicPivotバージョンを追加する

DECLARE 
    @ColumnsList1 AS NVARCHAR(MAX),
    @ColumnsList2 AS NVARCHAR(MAX),
    @ColumnsList3 AS NVARCHAR(MAX),
    @query AS NVARCHAR(MAX);

SET @ColumnsList1 = STUFF(
    (SELECT distinct ',' + QUOTENAME([Period]) FROM [MyTable] FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')
PRINT @ColumnsList1
SET @ColumnsList2 = REPLACE (@ColumnsList1, ',','+')
PRINT @ColumnsList2
SET @ColumnsList3 = (
    SELECT distinct ',SUM(' + QUOTENAME([Period]) + ') as ' + QUOTENAME([Period])
    FROM [MyTable] FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
PRINT @ColumnsList3

SET @query = '
;With MyCTE as(
select [Name],'+@ColumnsList1+','+@ColumnsList2+' AS Grand_Total
from (
    SELECT [Name], [Quantity],[Period]
    FROM [MyTable]
) src
pivot
(
  SUM(Quantity)
  for Period in ('+@ColumnsList1+')
) piv
)
select ISNULL([Name],''Totoal'') as Name '+@ColumnsList3+',SUM([Grand_Total]) [Grand_Total]
from MyCTE
GROUP BY ROLLUP ([Name])
'
execute(@query)
GO

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Big Queryを使用して、レコード内で複数のオブジェクトをクエリするにはどうすればよいですか?

分類Dev

Microsoft Word 2011で、複数の数値を選択してそれらをすべてクリップボードにコピーするマクロを作成するにはどうすればよいですか。

分類Dev

IN句を使用して最初のレコード(最新)をフェッチするSQLクエリを作成するにはどうすればよいですか?

分類Dev

ピボットテーブルを使用して、複数の列間の共通値の割合を表示するにはどうすればよいですか?

分類Dev

複数のテキストがあるクリップボードに「innerText」をコピーするにはどうすればよいですか?

分類Dev

ListViewで選択した複数のアイテムをクリップボードにコピーするにはどうすればよいですか?

分類Dev

複数の列をピボットするPostgreSQLピボットテーブルを作成するにはどうすればよいですか?

分類Dev

シンボリックリンクのあるディレクトリをコピーして解決するにはどうすればよいですか?

分類Dev

複数のコマンドボタン(OLEObject)を使用して新しいシートを作成するにはどうすればよいですか?

分類Dev

pandas / numpyで、文字列アイテムの数を使用してピボットテーブルを作成するにはどうすればよいですか?

分類Dev

bashスクリプトでawkを使用して複数行のレコードを処理するにはどうすればよいですか?

分類Dev

bashスクリプトでawkを使用して複数行のレコードを処理するにはどうすればよいですか?

分類Dev

複数のコミットをチェックアウトして、コードのバージョンを別のディレクトリにコピーするにはどうすればよいですか?

分類Dev

セレンボタンをクリックした後にクリップボードにコピーされた文字列をC#の変数に割り当てるにはどうすればよいですか?

分類Dev

Laravelブレードの複数選択。ピボットテーブルでレコードを選択するにはどうすればよいですか?

分類Dev

Antを使用したFTPタスクで複数のサブディレクトリをコピーするにはどうすればよいですか?

分類Dev

クエリを使用して複数のリスト<T>のコレクションを検索するにはどうすればよいですか?

分類Dev

1つのViewControllerに対して複数のセグエでストーリーボードを使用するにはどうすればよいですか?

分類Dev

kendo-combobox jqueryコードを再利用して複数の入力ボックスを作成するにはどうすればよいですか?

分類Dev

Googleスプレッドシートスクリプトを使用しているときに、新しいシートコピーを作成せずに、スプレッドシートのシートを別のスプレッドシートにコピーするにはどうすればよいですか?

分類Dev

nodejsのmongodbドライバーを使用して複数のオプションのクエリを作成するにはどうすればよいですか?

分類Dev

C#コードを使用して、クエリを使用してデータベースに直接接続するピボットテーブルを含むExcelシートを作成するにはどうすればよいですか?

分類Dev

内部クエリの特定の列の値に対して返されるレコード数を制限するにはどうすればよいですか?

分類Dev

Laravelで(正確なピボットIDを使用して)ポリモーフィックな多対多のピボットレコードを更新するにはどうすればよいですか?

分類Dev

ストリームのコピーを作成して、使用するときにJava 8で複製を使用するにはどうすればよいですか?

分類Dev

forループを使用してJavaScriptで複数のテキストボックスを作成するにはどうすればよいですか?

分類Dev

Linuxコマンドを使用して1つのディレクトリを複数のディレクトリにコピーするにはどうすればよいですか?

分類Dev

Neo4j +ボルト+ c#; マップをパラメーターとして渡すことにより、1つのクエリで複数のノードを作成するにはどうすればよいですか

分類Dev

Javaでスレッドを使用して複数の落下オブジェクトを作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    Big Queryを使用して、レコード内で複数のオブジェクトをクエリするにはどうすればよいですか?

  2. 2

    Microsoft Word 2011で、複数の数値を選択してそれらをすべてクリップボードにコピーするマクロを作成するにはどうすればよいですか。

  3. 3

    IN句を使用して最初のレコード(最新)をフェッチするSQLクエリを作成するにはどうすればよいですか?

  4. 4

    ピボットテーブルを使用して、複数の列間の共通値の割合を表示するにはどうすればよいですか?

  5. 5

    複数のテキストがあるクリップボードに「innerText」をコピーするにはどうすればよいですか?

  6. 6

    ListViewで選択した複数のアイテムをクリップボードにコピーするにはどうすればよいですか?

  7. 7

    複数の列をピボットするPostgreSQLピボットテーブルを作成するにはどうすればよいですか?

  8. 8

    シンボリックリンクのあるディレクトリをコピーして解決するにはどうすればよいですか?

  9. 9

    複数のコマンドボタン(OLEObject)を使用して新しいシートを作成するにはどうすればよいですか?

  10. 10

    pandas / numpyで、文字列アイテムの数を使用してピボットテーブルを作成するにはどうすればよいですか?

  11. 11

    bashスクリプトでawkを使用して複数行のレコードを処理するにはどうすればよいですか?

  12. 12

    bashスクリプトでawkを使用して複数行のレコードを処理するにはどうすればよいですか?

  13. 13

    複数のコミットをチェックアウトして、コードのバージョンを別のディレクトリにコピーするにはどうすればよいですか?

  14. 14

    セレンボタンをクリックした後にクリップボードにコピーされた文字列をC#の変数に割り当てるにはどうすればよいですか?

  15. 15

    Laravelブレードの複数選択。ピボットテーブルでレコードを選択するにはどうすればよいですか?

  16. 16

    Antを使用したFTPタスクで複数のサブディレクトリをコピーするにはどうすればよいですか?

  17. 17

    クエリを使用して複数のリスト<T>のコレクションを検索するにはどうすればよいですか?

  18. 18

    1つのViewControllerに対して複数のセグエでストーリーボードを使用するにはどうすればよいですか?

  19. 19

    kendo-combobox jqueryコードを再利用して複数の入力ボックスを作成するにはどうすればよいですか?

  20. 20

    Googleスプレッドシートスクリプトを使用しているときに、新しいシートコピーを作成せずに、スプレッドシートのシートを別のスプレッドシートにコピーするにはどうすればよいですか?

  21. 21

    nodejsのmongodbドライバーを使用して複数のオプションのクエリを作成するにはどうすればよいですか?

  22. 22

    C#コードを使用して、クエリを使用してデータベースに直接接続するピボットテーブルを含むExcelシートを作成するにはどうすればよいですか?

  23. 23

    内部クエリの特定の列の値に対して返されるレコード数を制限するにはどうすればよいですか?

  24. 24

    Laravelで(正確なピボットIDを使用して)ポリモーフィックな多対多のピボットレコードを更新するにはどうすればよいですか?

  25. 25

    ストリームのコピーを作成して、使用するときにJava 8で複製を使用するにはどうすればよいですか?

  26. 26

    forループを使用してJavaScriptで複数のテキストボックスを作成するにはどうすればよいですか?

  27. 27

    Linuxコマンドを使用して1つのディレクトリを複数のディレクトリにコピーするにはどうすればよいですか?

  28. 28

    Neo4j +ボルト+ c#; マップをパラメーターとして渡すことにより、1つのクエリで複数のノードを作成するにはどうすればよいですか

  29. 29

    Javaでスレッドを使用して複数の落下オブジェクトを作成するにはどうすればよいですか?

ホットタグ

アーカイブ