因此,为了解决问题,由于结构的原因,我只能尝试在SQL中对一些列数据进行排序,这是在回避我。问题是,我需要多组独立排序的2列,例如,我有如下所示:
Name | Val1 | Name | Val2 | Name | Val3 A | 2 | A | 1 | A | 3 B | 1 | B | 3 | B | 2 C | 3 | C | 2 | C | 1
我需要按照每个值中的最高值对表进行排序:
Name | Val1 | Name | Val2 | Name | Val3 C | 3 | B | 3 | A | 3 A | 2 | C | 2 | B | 2 B | 1 | A | 1 | C | 1
我似乎不知道如何使用ROW_NUMBER()和我通过长时间搜索所做的各种其他事情来组织组织--能够分离出单独的列来排序,但我不知道如何保持两个链接,而其他的单独排序,有人能帮忙吗?编辑:数据是在对其值进行计算后从一个表中推断出来的。所以说我的桌子是:
Name | Val1 | Val2 | Val3 | A | 2 | 1 | 3 | B | 1 | 3 | 2 | C | 3 | 2 | 1 | 因此,从最终结果表中,我需要得到的结果的格式是,具有最高值的名称将位于每个单独值的顶部,选择名称为N1、Val1、name AS N2、Val2等:编辑:Name1\x\x{e 010}Name2单位Name2 name2单位name2 name3单元AF 218收AF区0.83区AF收1.04个AD区172 AD区0.49个AD区0.49个AD区1.05个AD区1.05个AF区1.05个AF区116个AF区0.87个AF区1.87个AF区1.06个AF区324个AF区.84区AF区1.10
发布于 2018-12-06 11:00:48
如果我正确理解您的问题,请考虑以下方法:
CREATE TABLE #NameValue (
Name varchar(10),
Val1 int,
Val2 int,
Val3 int
)
INSERT INTO #NameValue
VALUES
('A', 102, 201, 303),
('B', 101, 203, 302),
('C', 103, 202, 301);
WITH nv1 AS (
SELECT Name, Val1, ROW_NUMBER() OVER (ORDER BY Val1 DESC) AS RN1
FROM #NameValue
),
nv2 AS (
SELECT Name, Val2, ROW_NUMBER() OVER (ORDER BY Val2 DESC) AS RN2
FROM #NameValue
),
nv3 AS (
SELECT Name, Val3, ROW_NUMBER() OVER (ORDER BY Val3 DESC) AS RN3
FROM #NameValue
)
SELECT
nv1.Name AS Name1, nv1.Val1,
nv2.Name AS Name2, nv2.Val2,
nv3.Name AS Name3, nv3.Val3
FROM nv1
LEFT JOIN nv2 ON (nv1.RN1 = nv2.RN2)
LEFT JOIN nv3 ON (nv1.RN1 = nv3.RN3)输出:
Name1 Val1 Name2 Val2 Name3 Val3
C 103 B 203 A 303
A 102 C 202 B 302
B 101 A 201 C 301https://stackoverflow.com/questions/53649342
复制相似问题