Порядок сортировки изменился, когда мы добавили () параграф к значению столбца в SQL Server - PullRequest
0 голосов
/ 09 мая 2019

У меня есть таблица, в которой данные в таблице выглядят так, как показано ниже.

enter image description here

Сортировка данных должна основываться на коде, модели, SequenceNo, Qual1 (порядок по коду, модель, SequenceNo, Qual1)подготовил SQL-запрос ниже, который дает идеальный результат.

SELECT Market
    ,Year
    ,Make
    ,BatchNo
    ,BatchLineNo
    ,SequenceNo
    ,Code
    ,Model
    ,Qual1
    ,Qual2
    ,TRANSACTION
FROM TABLE1
ORDER BY Code
    ,Model
    ,SequenceNo
    ,Qual1

Я должен включить paranthesis () в столбец Code, когда значение столбца транзакции равно DD или DC. Я подготовил SQL-запрос ниже, который работает нормальнои получил вывод, подобный этому, но порядок сортировки изменился, хотя в двух результирующих наборах порядок по выражению одинаков.

SELECT Market
    ,Year
    ,Make
    ,BatchNo
    ,BatchLineNo
    ,SequenceNo
    ,
    ,CASE 
        WHEN (
                TRANSACTION = 'DC'
                OR TRANSACTION = 'DD'
                )
            THEN '(' + Code + ')'
        ELSE Code
        END AS Code Model
    ,Qual1
    ,Qual2
    ,TRANSACTION
FROM TABLE1
ORDER BY Code
    ,Model
    ,SequenceNo
    ,Qual1

enter image description here Я не уверен, как выполнить код сскобки, а также порядок сортировки аналогичны моему первому набору результатов.

Ответы [ 4 ]

0 голосов
/ 09 мая 2019

Лично я бы удалил парены, создав столбец (может быть, через представление?) И сохранил бы только содержимое внутри паренов, таким образом: z (3) () (6) () станет '3 6'(3) (H) (6) (2) станет 3H62

и так далее.Сортировка по этому новому столбцу.

Самое простое решение по моим расчетам.

0 голосов
/ 09 мая 2019

Как видно из таблицы [ASCII], "(" - это число "40", "*" - это число "42", а "2" - это число "" 50 ". Заказ по этой причине. Вам необходимо создать таблицу, а затем снова вызвать таблицу и изменить значения, например:

Select Market
  ,Year
  ,Make
  ,BatchNo
  ,BatchLineNo
  ,SequenceNo
  ,
  ,CASE 
    WHEN (
      TRANSACTION = 'DC'
        OR TRANSACTION = 'DD'
    )
      THEN '(' + Code + ')'
    ELSE Code
  ,Code Model
  ,Qual1
  ,Qual2
  ,TRANSACTION
FROM (
  SELECT Market
    ,Year
    ,Make
    ,BatchNo
    ,BatchLineNo
    ,SequenceNo
    ,Code
    ,END AS Code Model
    ,Qual1
    ,Qual2
    ,TRANSACTION
  FROM TABLE1
  ORDER BY Code
    ,Model
    ,SequenceNo
    ,Qual1
) table
0 голосов
/ 09 мая 2019

Это происходит потому, что ORDER BY отдает приоритет порядку столбцам из списка столбцов, а не из таблиц. Вы можете принудительно упорядочить по столбцу таблицы, используя полное имя.

SELECT Market
    ,Year
    ,Make
    ,BatchNo
    ,BatchLineNo
    ,SequenceNo
    ,
    ,CASE 
        WHEN (
                TRANSACTION = 'DC'
                OR TRANSACTION = 'DD'
                )
            THEN '(' + Code + ')'
        ELSE Code
        END AS Code Model
    ,Qual1
    ,Qual2
    ,TRANSACTION
FROM TABLE1 AS T
ORDER BY T.Code
    ,Model
    ,SequenceNo
    ,Qual1;

Если по какой-либо причине вы хотите изменить порядок значений в отображаемом приложении, вам необходимо снова удалить скобки или добавить в них другой столбец.

0 голосов
/ 09 мая 2019

Почему бы вам не создать вычисляемый столбец с вашей логикой и использовать его для упорядочения?

В конце концов (если вы всегда упорядочиваете эти 4 столбца), вы можете обработать CONCAT 4 столбца и использовать только один столбец для сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...