Заказ пользовательских результатов с использованием UNION - TSQL - PullRequest
1 голос
/ 11 февраля 2011

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

Я использую объединение, чтобы узнать, какие элементы являются членами какой категории. Я думал, что выполнение 3 отборов и использование объединения объединят результаты в правильном порядке, но я ошибся:)

Мой SQL выглядит следующим образом:

SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 1 
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 2
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 0

Мои результаты не упорядочены с 1, затем 2, а затем 0 .. Что я здесь не так делаю ??

* РЕШЕНИЕ * Спасибо за помощь, ребята! Ниже приведен окончательный вариант SQL, который я использую.

SELECT * FROM tblcompanycategory 
    INNER JOIN tblcompany
    ON tblcompany.idcompany = tblcompanycategory.idcompany
    WHERE tblcompanycategory.idcategory = @category 
    ORDER BY CASE tblcompany.intpremium WHEN 1 THEN 0 WHEN 2 THEN 1 WHEN 0 THEN 2 END

Ответы [ 3 ]

2 голосов
/ 11 февраля 2011

Оператор UNION, как и все хорошие операторы множеств, не зависит от порядка данных.

Однако вы можете выполнить один оператор select с тщательно созданным оператором ORDER BY, например:

... ORDER BY CASE tblCompany.IntPremium WHEN 1 THEN 0 WHEN 2 THEN 1 WHEN 0 THEN 2 END
1 голос
/ 11 февраля 2011

Упорядочение не происходит по порядку ваших операторов выбора в предложении объединения.Самое простое, что можно сделать - добавить заказ по:

SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 1 
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 2
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 0

ORDER BY CASE intpremium WHEN 1 THEN 1 WHEN 2 THEN 2 WHEN 0 THEN 3 END
0 голосов
/ 11 февраля 2011

Вам нужно будет добавить столбец к трем операторам выбора с буквальным значением, которое «классифицирует» результаты. Затем закажите по этому столбцу.

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