тип заказа varchar отличается от того, что я вижу в Excel - PullRequest
0 голосов
/ 06 апреля 2011

Я запускаю следующий запрос

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. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2011

Если вы смешали цифры и текст в одном столбце, вы можете использовать это для сортировки по числовым значениям для чисел.

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
0 голосов
/ 06 апреля 2011

Сортировка в sql-сервере осуществляется в алфавитном порядке, а «1» предшествует «2».

Чтобы получить тот же тип сортировки, что и в Excel, я предлагаю использовать числовое поле вместо VARCHAR.

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