Имеется таблица. Необходимо сделать к ней запрос и вернуть не менее 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
Комментариев нет:
Отправить комментарий