sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2005 - 合計/カウントおよび値の動的リストを使用しないデータのピボット

    これはあなたが求めているものに近づきます。他のユーザーが使用できるように、テーブル作成スクリプトとサンプル データも含めました。このソリューションのインスピレーションは、こちら から得ました。

    -- Dynamic PIVOT
    DECLARE @T AS TABLE(y INT NOT NULL PRIMARY KEY);
    
    DECLARE
    @cols AS NVARCHAR(MAX),
    @y    AS INT,
    @sql  AS NVARCHAR(MAX);
    
    -- Construct the column list for the IN clause
    -- e.g., [Dog],[Python]
    SET @cols = STUFF(
    (SELECT N',' + QUOTENAME(y) AS [text()]
    FROM (SELECT DISTINCT [Value] AS y FROM dbo.table_1) AS Y
    ORDER BY y
    FOR XML PATH('')),
    1, 1, N'');
    
    -- Construct the full T-SQL statement
    -- and execute dynamically
    SET @sql = N'SELECT *
    FROM (SELECT *
    FROM dbo.table_1) AS D
    PIVOT(MIN(value) FOR value IN(' + @cols + N')) AS P;';
    
    PRINT @sql
    EXEC sp_executesql @sql;
    GO
    

    テーブルの作成:

    CREATE TABLE [dbo].[Table_1](
        [Name] [varchar](50) COLLATE Latin1_General_CI_AS NULL,
        [Value] [varchar](50) COLLATE Latin1_General_CI_AS NULL
    ) ON [PRIMARY]
    
    GO
    

    サンプルデータ:

    insert into dbo.table_1 values ('John','Dog')
    insert into dbo.table_1 values ('John','Cat')
    insert into dbo.table_1 values ('John','Fish')
    insert into dbo.table_1 values ('Bob ','Python')
    insert into dbo.table_1 values ('Bob ','Camel')
    


    1. DockerでMySQLコンテナをTomcatコンテナに接続できません

    2. 配列をパラメーターとして SQL 2005 ストアド プロシージャに渡す

    3. MySQLトリガー:挿入前または挿入後

    4. RAC OneNodeアーキテクチャでのActiveDataGuardフィジカルスタンバイの設定–パート1