Заказ пользовательского результата с использованием UNION – TSQL

У меня довольно простая задача, в которой мне нужно выбрать строки с определенным полем со значением 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 

Оператор UNION, как и все хорошие операторы набора, является агностическим, когда дело доходит до упорядочения данных.

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

 ... ORDER BY CASE tblCompany.IntPremium WHEN 1 THEN 0 WHEN 2 THEN 1 WHEN 0 THEN 2 END 

Заказ не выполняется по порядку ваших операторов select в предложении union. Самое простое – добавить заказ:

 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 

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

  • изменение имени базы данных в сценарии сервера sql
  • Sql Как присоединиться к таблице, где данные в Colums одинаковы
  • Получение ошибки при вложенном запросе
  • Почему попытка сохранить URL-адрес с хранимой процедурой только вставить точку?
  • Как очистить таблицу назначения до вставки новых записей в SSIS?
  • SQL: как сохранить значение Integer в функции CASE в sql?
  • Как использовать coalesce вместо IS NULL>
  • как рассчитать продолжительность времени в таблице
  • выберите строку n раз с SQL
  • Отображать данные за прошедшую неделю (база данных на миллиард строк)
  • Найдите две последовательные строки
  • Interesting Posts

    Получить значение предыдущей строки, где результаты не имеют последовательных идентификаторов

    SQL Server 2005 и SQL Server 2008, как сделать его совместимым?

    Получение результата из хранимой процедуры

    где предложение из нескольких столбцов

    Неявное преобразование производительности SQL и Dapper

    Добавление row_number влияет на порядок строк в сворачивании

    Порядок столбцов составного кластерного индекса в выражении ALTER TABLE

    Синтаксический намек на индексирование из структуры сущности в SQL Server

    Триггер против хранимой процедуры

    Когда направление для параметра TStoredProcedure является pdOutput?

    Несколько столбцов и оператор IN

    C # хранимая процедура без передачи необязательных параметров

    Преобразование нерегулярного varchar в datetime в sql-сервере

    Уникальный формат ограничения для неориентированного графика (1,2), предотвращения (2,1)

    Замена префиксов пространства имен xml в SQL Server с помощью XQuery

    Давайте будем гением компьютера.