Sql Pivot只有前N行

时间:2010-09-21 23:47:35

标签: sql sql-server sql-server-2005 tsql pivot

我有以下结构

Col1 Col2 Col3  
---------------
F     P    R1
F     P    R2
F     P    R3
F     P    R4

Col3值可以是任何东西 现在我只希望以下格式排在前三位

Col1 Col2 Res1 Res2 Res3  
------------------------------
F     P    R1   R2   R3

3 个答案:

答案 0 :(得分:2)

如果使用SQL Server 2005 +,Oracle 8i +,PostgreSQL 8.4 + - 您可以使用分析函数:

  SELECT x.col1, x.col2,
         MAX(CASE WHEN x.rk = 1 THEN x.col3 END) AS Res1,
         MAX(CASE WHEN x.rk = 2 THEN x.col3 END) AS Res2,
         MAX(CASE WHEN x.rk = 3 THEN x.col3 END) AS Res3
    FROM (SELECT yt.col1,
                 yt.col2,
                 yt.col3,
                 ROW_NUMBER() OVER(PARTITION BY yt.col1, yt.col2
                                       ORDER BY yt.col3) AS rk
            FROM YOUR_TABLE yt) x
GROUP BY x.col1, x.col2

答案 1 :(得分:0)

您可以执行以下操作:

SELECT Col1, Col2,
    MAX(CASE Col3 WHEN 'R1' THEN 'R1' END) as Res1,
    MAX(CASE Col3 WHEN 'R2' THEN 'R2' END) as Res2,
    MAX(CASE Col3 WHEN 'R3' THEN 'R3' END) as Res3
FROM MyTable
GROUP BY Col1, Col2

答案 2 :(得分:0)

您所寻求的是动态交叉表查询,它将在Col3中的值中构建列。 SQL语言不是为动态列生成而设计的,因此如果没有一些非常动态的SQL,这种类型的查询就无法在T-SQL中完成。相反,我建议您在中间层组件中构建查询或使用报告工具。