Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server获取列中一列的排名_Sql Server - Fatal编程技术网

Sql server SQL Server获取列中一列的排名

Sql 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

我想要一个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 2
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';