Sql server 如何从表中查找前6列

Sql server 如何从表中查找前6列,sql-server,tsql,Sql Server,Tsql,下面是我在表中的TEMP2列 [ID],[Week1], [Week2],[Week3],[Week4],[Week5], [Week6],[Week7],[Week8],[Week9], [Week10], [Week11],[Week12],[Week13], [Week14],[Week15], [Week16],[Week17], [Week18],[Week19],[Week20], [Week21], [Week22],[Week23],[Week24],[Week25], [We

下面是我在表中的TEMP2列

[ID],[Week1], [Week2],[Week3],[Week4],[Week5], 
[Week6],[Week7],[Week8],[Week9], [Week10],
[Week11],[Week12],[Week13], [Week14],[Week15],
[Week16],[Week17], [Week18],[Week19],[Week20],
[Week21], [Week22],[Week23],[Week24],[Week25], [Week26]
我想从每行中找到前6条记录并显示

下面是我尝试使用的查询,但未获取预期结果。我做错了什么

SELECT 
    id, [1], [2], [3],[4], [5], [6]
    FROM 
    (SELECT 
        id, Val, rn
        FROM 
        (SELECT id, Val, Col,
            ROW_NUMBER()OVER (PARTITION BY id ORDER BY Val) 
            AS rn
                FROM 
                TEMP2
    UNPIVOT 
    (Val FOR Col IN ([Week1],
    [Week2],[Week3],[Week4],[Week5],[Week6],[Week7],[Week8],[Week9],
    [Week10],[Week11],[Week12],[Week13],[Week14],[Week15],[Week16],[Week17],
    [Week18],[Week19],[Week20],[Week21],[Week22],[Week23],[Week24],[Week25],
    [Week26]))AS unpvt) AS t
        WHERE 
        t.rn <= 6) AS src
            PIVOT 
            (MAX(Val) FOR rn IN ([1], [2], [3],[4], [5], [6])) AS pvt
我使用的是SQL Server 2008。

正如上面评论中所建议的那样,似乎您只需要在PARTITION by语句中按Val DESC排序,以首先返回最大值

这对我设置的一些测试数据起到了作用:

SELECT 
    id, [1], [2], [3], [4], [5], [6]
    FROM 
    (SELECT 
        id, Val, rn
        FROM 
        (SELECT id, Val, Col,
            ROW_NUMBER()OVER (PARTITION BY id ORDER BY Val DESC) 
            AS rn
                FROM 
                TEMP2
    UNPIVOT 
    (Val FOR Col IN ([Week1],
    [Week2],[Week3],[Week4],[Week5],[Week6],[Week7],[Week8],[Week9],
    [Week10],[Week11],[Week12],[Week13],[Week14],[Week15],[Week16],[Week17],
    [Week18],[Week19],[Week20],[Week21],[Week22],[Week23],[Week24],[Week25],
    [Week26]))AS unpvt) AS t
        WHERE 
        t.rn <= 6) AS src
            PIVOT 
            (MAX(Val) FOR rn IN ([1], [2], [3], [4], [5], [6])) AS pvt
正如上面注释中所建议的,似乎只需要在partitionby语句中按valdesc排序,首先返回最大值

这对我设置的一些测试数据起到了作用:

SELECT 
    id, [1], [2], [3], [4], [5], [6]
    FROM 
    (SELECT 
        id, Val, rn
        FROM 
        (SELECT id, Val, Col,
            ROW_NUMBER()OVER (PARTITION BY id ORDER BY Val DESC) 
            AS rn
                FROM 
                TEMP2
    UNPIVOT 
    (Val FOR Col IN ([Week1],
    [Week2],[Week3],[Week4],[Week5],[Week6],[Week7],[Week8],[Week9],
    [Week10],[Week11],[Week12],[Week13],[Week14],[Week15],[Week16],[Week17],
    [Week18],[Week19],[Week20],[Week21],[Week22],[Week23],[Week24],[Week25],
    [Week26]))AS unpvt) AS t
        WHERE 
        t.rn <= 6) AS src
            PIVOT 
            (MAX(Val) FOR rn IN ([1], [2], [3], [4], [5], [6])) AS pvt

您能添加一个您期望的示例输出和您在上面的查询中得到的结果吗,如果您想将数字1-6分配给Val的最高值,而不是最低值。否决投票的人可以向我解释原因吗?您能添加一个您期望的示例输出以及上面查询得到的结果吗?按id划分顺序按Val DESC,当然,如果你想将数字1-6分配给Val的最高值,而不是最低值。否决投票的人可以向我解释原因吗?没问题,信用应该归尽管真的。没问题,信用应该归尽管真的。