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

Cross apply を使用してテーブルをループし、結果を UNION ALL にする

    Cross Applyを使用 結果のピボットを解除します。動的クエリ クエリは、この形式で構築する必要があります。

    SELECT mnum,
           label,
           label_value,
           [Property Type]
    FROM   #SetValuesTable
           CROSS apply(VALUES ('la1',la1),('la2',la2),('la3',la3),
                              ('sa1',sa1),('sa2',sa2),('sa3',sa3),
                              ('ha1',ha1),('ha2',ha2),('ha3',ha3),
                              ('ka1',ka1),('ka2',ka2)) cs (label, label_value) 
    

    Dynamic query

    のようなものにする必要があります
    DECLARE @label VARCHAR(max)='',
            @sql   NVARCHAR(max)
    
    SELECT @label += '(' + '''' + label + ''',' + label + '),'
    FROM   (SELECT DISTINCT Isnull(label, '') label
            FROM   #labelTempTab)a
    
    SELECT @label = LEFT(@label, Len(@label) - 1)
    
    SET @sql= 'SELECT mnum,
                 label,
                 label_value,
                 [Property Type]
        FROM   #SetValuesTable
               CROSS apply(VALUES ' + @label
              + ') cs (label, label_value) '
    
    EXEC Sp_executesql @sql 
    

    注: #labelTempTab から値リストを生成しているため #SetValuesTable にすべてのラベルがあることを確認してください テーブル




    1. MySQL/PHPで表示されるレコードを繰り返さないでください

    2. プロファイラーで SQL を非表示にする

    3. OracleDG40DBCの微調整

    4. Laravelのフィールドのどこで注文するか