SQL中的逆透视-首选视图

我需要一些有关 SQL 中的逆透视数据的帮助。目前它在 SQL Server SSIS 包上运行。在未来,这将不再可能。我希望,你能帮助我。

是否可以创建一个创建结果的视图?

我的出发点是:

PK 日期 AG 艺术 MA1 MA2 MA3 BA1 BA2 BA3 BS1 BS2 BS3 BZ1 BZ2 BZ3
1 01.01.2021 1 A1 M1 M2 M3 100 105 110 10 15 20 50 60 70
2 01.01.2021 1 A2 M2 M3 100 113 11 12 18 8 9
3 02.01.2021 2 A3 M3 100 2 3 2 6
4 02.01.2021 5 A3 12 13 8 8
5 03.01.2021 3 A4 M2 M3 M1 100 102 103 3 4 5 7 8 9
6 03.01.2021 1 A5 M3 M1 100 105 7 3 5 8 8

回答

正如我在评论中提到的,CROSS APPLY VALUES 是处理这些类型的逆向问题的最简单、性能最好的方法。

    DROP TABLE IF EXISTS #Test;
    GO
    
    CREATE TABLE #Test
    (
        PK TINYINT IDENTITY PRIMARY KEY
        ,[Date] DATE NOT NULL
        ,AG TINYINT NOT NULL
        ,ART VARCHAR(2) NOT NULL
        ,MA1 VARCHAR(2) NOT NULL
        ,MA2 VARCHAR(2) NOT NULL
        ,MA3 VARCHAR(2) NOT NULL
        ,BA1 VARCHAR(3) NOT NULL
        ,BA2 VARCHAR(3) NOT NULL
        ,BA3 VARCHAR(3) NOT NULL
        ,BS1 VARCHAR(2) NOT NULL
        ,BS2 VARCHAR(2) NOT NULL
        ,BS3 VARCHAR(2) NOT NULL
        ,BZ1 VARCHAR(2) NOT NULL
        ,BZ2 VARCHAR(2) NOT NULL
        ,BZ3 VARCHAR(2) NOT NULL
    )
    ;
    GO

    INSERT INTO #Test
    (
        [Date]
        ,AG,ART
        ,MA1,MA2,MA3
        ,BA1,BA2,BA3
        ,BS1,BS2,BS3
        ,BZ1,BZ2,BZ3
    )
    VALUES
     ('01.01.2021',1,'A1',  'M1',   'M2',   'M3',   '100',  '105',  '110',  '10',   '15',   '20',   '50',   '60',   '70')
    ,('01.01.2021',1,'A2',  'M2',   'M3',   '  ',   '100',  '113',  '   ',  '11',   '12',   '18',   '8 ',   '9 ',   '  ') 
    ,('02.01.2021',2,'A3',  'M3',   '  ',   '  ',   '100',  '2  ',  '   ',  '3 ',   '  ',   '  ',   '2 ',   '  ',   '6 ')
    ,('02.01.2021',5,'A3',  '  ',   '  ',   '  ',   '12 ',  '13 ',  '   ',  '  ',   '  ',   '8 ',   '  ',   '  ',   '8 ')
    ,('03.01.2021',3,'A4',  'M2',   'M3',   'M1',   '100',  '102',  '103',  '3 ',   '4 ',   '5 ',   '7 ',   '8 ',   '9 ')
    ,('03.01.2021',1,'A5',  'M3',   'M1',   '  ',   '100',  '105',  '7  ',  '3 ',   '5 ',   '  ',   '8 ',   '8 ',   '  ')
    ;
    SELECT
        TST.PK
        ,TST.[Date]
        ,TST.AG
        ,TST.ART
        ,UNP.MA
        ,UNP.BA
        ,UNP.BS
        ,UNP.BZ
    FROM #Test AS TST
    CROSS APPLY
    (
        VALUES
        (MA1,BA1,BS1,BZ1,1)
        ,(MA2,BA2,BS2,BZ2,2)
        ,(MA3,BA3,BS3,BZ3,3)
    ) AS UNP (MA,BA,BS,BZ,ORD)
    ORDER BY
        TST.PK
        ,TST.[Date]
        ,TST.AG
        ,TST.ART
        ,UNP.ORD
    ;


以上是SQL中的逆透视-首选视图的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>