Страницы

Поиск по вопросам

пятница, 12 июля 2019 г.

Как создать запрос к MSSQL, возвращающий фиксированное число строк, даже если данных нет?

Имеется таблица. Необходимо сделать к ней запрос и вернуть не менее 5 записей по определенным условиям. Если в таблице нет 5 записей, удовлетворяющих заданным условиям, необходимо, чтобы вернулись те записи, которые удовлетворяют условию (например, 3 записи), и еще 2 записи с какими-то фиксированными данными (числовые поля 0, строковые - пустые строки).
Пример. Таблица table
| INT id | INT data | VARCHAR str_data | INT status | ----------------------------------------------------- | 1 | 123 | "qwert" | 1 | ----------------------------------------------------- | 2 | 343 | "zzzzz" | 1 | ----------------------------------------------------- | 3 | 923 | "qweq" | 2 | ----------------------------------------------------- | 4 | 843 | "qdfgrt" | 2 | ----------------------------------------------------- | 5 | 763 | "qddftp" | 1 | -----------------------------------------------------
Необходим запрос (SELECT data, str_data, status FROM table WHERE status = 1), который вернет следующее:
| INT data | VARCHAR str_data | INT status | -------------------------------------------- | 123 | "qwert" | 1 | -------------------------------------------- | 343 | "zzzzz" | 1 | -------------------------------------------- | 763 | "qddftp" | 1 | -------------------------------------------- | 0 | "" | 0 | -------------------------------------------- | 0 | "" | 0 | --------------------------------------------
Единственное, что приходит в голову, это держать в таблице 5 "нулевых" записей (последние 2 строки), но этот вариант не нравится.


Ответ

Например, так: select top 5 * from ( SELECT data, str_data, status FROM table WHERE status = 1 union all select 0, '', 0 union all select 0, '', 0 union all select 0, '', 0 union all select 0, '', 0 union all select 0, '', 0 ) X order by status desc

Комментариев нет:

Отправить комментарий