#sql-server-2008
#sql-server-2008
Вопрос:
Я запускаю следующий запрос
CREATE TABLE #Temp
(
Data VARCHAR(100)
)
INSERT INTO #Temp VALUES ('241.110')
INSERT INTO #Temp VALUES ('1340.306')
SELECT * FROM #Temp ORDER BY Data asc
Результат
1340.306
241.110
Когда я сортирую одни и те же данные в Excel в порядке от наименьшего к наибольшему, он имеет
241.110
1340.306
В SQL Server мне нужен тот же порядок, что и в Excel. Что я делаю не так?
Ответ №1:
Если у вас смешаны цифры и текст в одном столбце, вы могли бы использовать это для сортировки по числовым значениям для цифр.
CREATE TABLE #Temp
(
Data varchar(100)
)
INSERT INTO #Temp VALUES ('241.110')
INSERT INTO #Temp VALUES ('1340.306')
INSERT INTO #Temp VALUES ('b')
INSERT INTO #Temp VALUES ('aa')
INSERT INTO #Temp VALUES ('241.2')
SELECT *
FROM #Temp
ORDER BY
case isnumeric(Data) when 0 then Data end asc,
case isnumeric(Data) when 1 then cast(Data as numeric(10,3)) end asc
Результат:
Data
----------
241.110
241.2
1340.306
aa
b
Отредактируйте 1 второй столбец, который будет обрабатываться таким же образом.
SELECT *
FROM #Temp
ORDER BY
case isnumeric(Data) when 0 then Data end asc,
case isnumeric(Data) when 1 then cast(Data as numeric(10,3))end asc,
case isnumeric(Data2) when 0 then Data2 end asc,
case isnumeric(Data2) when 1 then cast(Data2 as numeric(10,3))end asc
Комментарии:
1. хм, это интересно, я не знал, что вы можете использовать регистр по порядку. Могу ли я упорядочивать несколько столбцов по порядку в сочетании с регистром, например, если у меня есть столбцы Data1, Data2, могу ли я проверить наличие обоих одинаковым образом?
2. @palm — Не уверен, понимаю ли я, чего вы хотите, но у вас может быть более одного столбца / оператора в порядке. В моем ответе есть два оператора по порядку, разделенные запятой. Первый возвращает строку или null, второй возвращает числовое значение или null. Вы, конечно, можете добавить больше инструкций в предложение order by.
3. извините за мое невежество, но, допустим, у меня есть два столбца Data1 и Data2, и если я хочу выполнить ПОРЯДОК ПО Data1, Data2 by с проверкой РЕГИСТРА, которую вы можете показать на примере. Я пытаюсь это сделать, но получаю синтаксические ошибки
4. @palm — Добавлена версия, в которой у вас есть столбец Date2, который обрабатывается так же, как и порядок вторичной сортировки.
Ответ №2:
Сортировка в sql-server выполняется в алфавитном порядке, а ‘1’ предшествует ‘2’.
Чтобы получить тот же вид, что и в Excel, я предлагаю вам использовать числовое поле вместо VARCHAR.