Независимая сортировка нескольких столбцов в MS SQL Server

Итак, чтобы не мешать, из-за структуры я остаюсь в ситуации, когда пытаюсь отсортировать некоторые столбцы данных в 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    | 

The values are names specifically are just used for example, but are wildly Differing values. So from that table of final results i need to get the results in the format that the name with the highest value will be on top for each individual value SELECT Name AS N1, Val1, Name As N2, Val2 etc EDIT: Example:

   Name1|Units|Name2|Units| Name3|Units
   AF   |218  |AF   |0.83 | AF   |1.04
   AD   |172  |AD   |0.49 | AD   |1.05
   AF   |116  |AF   |0.87 | AF   |1.06
   AF   |324  |AF   |0.84 | AF   |1.10

У вас В самом деле есть 3 столбца с именем [name]? В таблице не может быть 2 (или более) столбцов с одинаковым именем. На самом деле это 3 разные таблицы, а не 1?

Larnu 06.12.2018 11:33

Они извлекаются из таблицы, получая общие данные, а затем создают из нее подтаблицу в желаемом формате, поэтому я могу получить первый приведенный пример таблицы, но у меня возникают проблемы с его надлежащей сортировкой. хотя список имен такой же, они, например, Name1, Name2

Khaizen 06.12.2018 11:36

Как получить первый стол?

dnoeth 06.12.2018 11:37

Выберите имя как N1, Val1, имя как N2, Val2, имя как N3, Val3 из таблицы

Khaizen 06.12.2018 11:39

Судя по их комментарию ниже «Однако эти данные предназначены для таблицы« лиги »как сортировки, поэтому числа приведены только для примера, но могут сильно различаться, поэтому таблица не может быть объединена по значению, поскольку они идут с двумя десятичными знаками», кажется, что данные, предоставленные нам OP, не являются репрезентативными для их реальных данных. Таким образом, на данный момент ответить на этот вопрос невозможно.

Larnu 06.12.2018 11:49

Прошу прощения, с неясным объяснением, что могло бы упростить задачу, зная, что значения могут быть в любом диапазоне от 0 до 100 000? просто указанные значения связаны с конкретными именами

Khaizen 06.12.2018 11:51

Предоставьте нам данные, представляющие ваши данные, в том виде, в котором они находятся.

Larnu 06.12.2018 11:53

Вы сказали в вашем комментарии ниже "поэтому числа приведены только для примера, но могут сильно различаться, поэтому таблица не может быть объединена по значению, поскольку они идут с двумя десятичными знаками". Вы поставляете int. Что правильно? Если это не целые числа, и мы не можем выполнить JOIN для этих значений, почему вы указываете значение int, которое является явным кандидатом на JOIN?

Larnu 06.12.2018 11:58

Прошу прощения, я пытался передать то, что сами числа должны быть независимо упорядочены от наибольшего к наименьшему и чтобы соответствующее имя соответствовало указанному значению, поэтому я считал, что рассматриваемые числа не имеют отношения

Khaizen 06.12.2018 12:11
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
9
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понял ваш вопрос, рассмотрите следующий подход:

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       301

ИДЕАЛЬНО! большое спасибо: D я был близок к этому, но не мог как следует разобрать в голове

Khaizen 06.12.2018 12:08

Другие вопросы по теме