T-SQL查询获得以下结果

时间:2018-05-21 07:48:21

标签: sql-server tsql

我在面试中遇到了一个问题。

您能为此提供解决方案吗?

enter image description here

3 个答案:

答案 0 :(得分:1)

我会通过UNPIVOTing数据尝试这一点并使用ROW_Number来获取ColumnName的整数,如此

DECLARE @t TABLE ( Column1 CHAR(1), Column2 CHAR(3))
INSERT INTO @t
(Column1,Column2)
VALUES
('A', 'AAA') ,('B', 'BBB') ,('C', 'CCC') ,('D', 'DDD') 

SELECT 
     ColData = T.Column1
    ,ColName = 'Column1.' + CAST(ROW_NUMBER()OVER(ORDER BY (SELECT null)) AS NVARCHAR(5))
FROM @t T
UNION
SELECT 
     ColData = T.Column2
    ,ColName = 'Column2.' + CAST(ROW_NUMBER()OVER(ORDER BY (SELECT null)) AS NVARCHAR(5))
FROM @t T

给出了这个结果

ColData ColName
A       Column1.1
AAA     Column2.1
B       Column1.2
BBB     Column2.2
C       Column1.3
CCC     Column2.3
D       Column1.4
DDD     Column2.4

然后将其包装在PIVOT查询中以获取所需的输出

SELECT
    [Column1.1],[Column2.1],[Column1.2],[Column2.2],[Column1.3],[Column2.3],[Column1.4],[Column2.4]
FROM(
        SELECT 
             ColData = T.Column1
            ,ColName = 'Column1.' + CAST(ROW_NUMBER()OVER(ORDER BY (SELECT null)) AS NVARCHAR(5))
        FROM @t T
        UNION
        SELECT 
             ColData = T.Column2
            ,ColName = 'Column2.' + CAST(ROW_NUMBER()OVER(ORDER BY (SELECT null)) AS NVARCHAR(5))
        FROM @t T
)AS Tab
PIVOT 
(  
    MAX(ColData)  
    FOR ColName IN ([Column1.1],[Column2.1],[Column1.2],[Column2.2],[Column1.3],[Column2.3],[Column1.4],[Column2.4])  
) AS PIV;

输出

Column1.1   Column2.1   Column1.2   Column2.2   Column1.3   Column2.3   Column1.4   Column2.4
A            AAA         B           BBB         C           CCC         D           DDD

答案 1 :(得分:0)

试试这个。它在我的工作结束。

   SELECT
    [Column1.1],[Column2.1],[Column1.2],[Column2.2],[Column1.3],[Column2.3],[Column1.4],[Column2.4]
FROM(
        SELECT 
             ColData = Table1.Column1
            ,ColName = 'Column1.' + CAST(ROW_NUMBER()OVER(ORDER BY (SELECT null)) AS NVARCHAR(5))
        FROM Table1
        UNION
        SELECT 
             ColData = Table1.Column2
            ,ColName = 'Column2.' + CAST(ROW_NUMBER()OVER(ORDER BY (SELECT null)) AS NVARCHAR(5))
        FROM  Table1
)AS Tab
PIVOT 
(  
    MAX(ColData)  
    FOR ColName IN ([Column1.1],[Column2.1],[Column1.2],[Column2.2],[Column1.3],[Column2.3],[Column1.4],[Column2.4])  
) AS PIV;

输出:

enter image description here

答案 2 :(得分:0)

使用条件聚合可以使用多个列

DataContext="{Binding RelativeSource={RelativeSource Self}}"

PIVOT