SQL Использование ORDER BY с UNION неправильно сортирует числа (например, 10 до 8) - PullRequest
1 голос
/ 28 октября 2010

Я пытался найти ответ и прочитал много тем на этом сайте, но все еще не могу найти ответ, который ищу.

Я пытаюсь отсортировать серию чисел, которые являются реальными поисками, а также одну *, которая не *, я могу сортировать нормально, когда мне не нужно добавлять фальшивку *, но не после.

Я пытался

SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear
FROM MasterTable
UNION ALL
SELECT DISTINCT "*" As [ClassName], "1" As [ClassYear]
FROM MasterTable
ORDER BY MasterTable.ClassYear;

И

SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear
FROM (
   SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear FROM MasterTable
   UNION
   SELECT DISTINCT "*" As [ClassName], "1" As [ClassYear] FROM MasterTable
)
ORDER BY MasterTable.ClassYear;

Но оба возвращают ClassYear как 1, 10, 12, 8 ... вместо 1, 8, 10, 12 ....

Любая помощь будет высоко ценится, Спасибо:)

Ответы [ 3 ]

4 голосов
/ 28 октября 2010

MasterTable.ClassYear - это varchar, поэтому он будет сортироваться как строка.

Вам нужно будет преобразовать его в запросе или исправить тип столбца.

Для 2-го предложения вам также нужно только:

SELECT "*" As [ClassName], "1" As [ClassYear] --No FROM MasterTable

Однако вы можете «обмануть» и сделать это. Здесь 1 будет int и вызовет преобразование в int из 1-го предложения, потому что

SELECT "*" As [ClassName], 1 As [ClassYear]  --force int. And fixed on edit
UNION ALL
SELECT DISTINCT MasterTable.ClassName, MasterTable.ClassYear
FROM MasterTable
ORDER BY ClassYear; --no table ref needed
2 голосов
/ 28 октября 2010

Это свойство сортирует эти значения в виде строк.Если вы хотите, чтобы они были в числовом порядке, попробуйте что-то вроде Cast(MasterTable.ClassYear AS int), либо в select, либо в порядке, либо обоими, в зависимости от того, как вы в конечном итоге структурируете свой запрос., напишите SELECT ..., 1 As [ClassYear].

1 голос
/ 28 октября 2010

Вы возвращаете год в виде строки, а не числа. Это означает, что он сортируется как текст, а не по номерам.

Либо вернуть год в виде числа, либо преобразовать значение в число при сортировке.

...