Sql server SQL Server获取列中一列的排名
我想要一个SQL Server查询跨行排列黑色列,并显示为黑色列。 请帮忙 Area Blue Green Red Yellow Brown Black Black Rank A 514 13 211 1059 544 659 2 B 329 16 172 622 386 362 3 C 497 14 246 921 610 553 3 D 652 18 279 1243 804 748 3 E 1485 22 555 4171 1055 2688 1 F 470 5 114 1396 304 1311 2 G 401 10 196 1170 548 590 2 H 626 6 210 1488 511 889 2 J 417 3 61 995 132 822 2 K 247 2 24 746 62 672 2 L 172 NULL 19 444 57 452 1 M 201 6 107 1113 269 818 2 N 122 4 77 567 231 388 2 O 137 3 84 237 247 241 2 P 133 1 82 345 222 251 2 区域蓝绿色红色黄色棕色黑色等级 A 514 13 211 1059 544 659 2 B 329 16 172 622 386 362 3 C 497 14 246 921 610 553 3 D 652 18 279 1243 804 748 3 E 1485 22 555 4171 1055 2688 1 F 470 5 114 1396 304 1311 2 G 40110196 1170548590 2 H 626 6 210 1488 511 889 2 J 417 3 61 995 132 822 2 K 247 2 24 746 62 672 2 L 172空19 444 57 452 1 M 201 6 107 1113 269 818 2 N 122 4 77 567 231 388 2 O 137 3 84 237 247 241 2 P 133 1 82 345 222 251 2Sql server SQL Server获取列中一列的排名,sql-server,Sql Server,我想要一个SQL Server查询跨行排列黑色列,并显示为黑色列。 请帮忙 Area Blue Green Red Yellow Brown Black Black Rank A 514 13 211 1059 544 659 2 B 329 16 172 622 386 362 3 C 497 14 246 921 610
Anon的解决方案运行良好,这里是另一个使用SQL Server分析函数的替代版本
WITH cte AS (
SELECT Area, name, value, RANK() OVER (PARTITION BY Area ORDER BY value DESC) r
FROM mytable
UNPIVOT(value FOR name IN (Blue, Green, Red, Yellow, Brown, Black))q
)
SELECT mytable.*, r [Black rank]
FROM mytable
JOIN cte ON cte.area = mytable.area
WHERE cte.name = 'black';
排名依据什么?你能分享你已经尝试过的代码吗?正如你所看到的,与其他列相比,黑色值的排名是659,与其他列相比是第二(2),因此排名是2。请告诉我如何使用函数t(val),查询在t附近说了不正确的语法,谢谢。
t(val)
不是函数,而是VALUES子句的别名。你需要复制整个查询。哦,天哪,我还是不明白。请给我完整的数字query@user3350775SQL Server>=2008是必需的,否则表值构造函数将无法工作。
WITH cte AS (
SELECT Area, name, value, RANK() OVER (PARTITION BY Area ORDER BY value DESC) r
FROM mytable
UNPIVOT(value FOR name IN (Blue, Green, Red, Yellow, Brown, Black))q
)
SELECT mytable.*, r [Black rank]
FROM mytable
JOIN cte ON cte.area = mytable.area
WHERE cte.name = 'black';