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

SQL Serverでグループ化された値から動的列を返す方法(ストアドプロシージャ)

    ケース1の場合、これを試してください:

    --Creating Test tables
    create table #activity
    (
        ActivityId TINYINT,
        ActivityName VARCHAR(20)
    )
    
    create table #date
    (
        [Date] DATE,
        ActivityId TINYINT
    )
    
    INSERT INTO #activity VALUES(1,'Activity 1')
    INSERT INTO #activity VALUES(2,'Activity 2')
    INSERT INTO #activity VALUES(3,'Activity 3')
    
    INSERT INTO #date VALUES('2015-05-01',1)
    INSERT INTO #date VALUES('2015-05-01',1)
    INSERT INTO #date VALUES('2015-05-02',2)
    INSERT INTO #date VALUES('2015-05-03',3)
    
    
    DECLARE @activities NVARCHAR(MAX)
    DECLARE @stmt NVARCHAR(MAX)
    
    SET  @activities = ''
    SET  @stmt = ''
    
    --Get List of Activities
    SELECT  @activities = @activities + ',[' + ActivityName + ']'
    FROM    #activity
    
    SET @activities = RIGHT(@activities, LEN(@activities)-1) --Remove Leading Comma
    
    --Build PIVOT Statement
    SET @stmt = 'SELECT  [Date],' + @activities + '
                FROM    (SELECT d.[Date], a.ActivityName
                         FROM   #date d
                                INNER JOIN #activity a ON d.ActivityId = a.ActivityId) tab
                        PIVOT (COUNT(ActivityName) FOR ActivityName IN (' + @activities + ')) AS NumberOfActivities'
    
    --Execute
    EXEC sp_executesql @stmt
    
    --CleanUp
    DROP TABLE #activity
    DROP TABLE #date
    


    1. 10進数として格納されたIPアドレス-点線のクワッドとして表示するPL/SQL

    2. PostgreSQLで指定された列でグループ化

    3. データのダンプ中の外部キーの制約

    4. foreachループで日付をグループ化する