@dzukp

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

Имеется таблица. Необходимо сделать к ней запрос и вернуть не менее 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 строки), но этот вариант не нравится.
  • Вопрос задан
  • 2522 просмотра
Решения вопроса 1
@dzukp Автор вопроса
Если вдруг кому интересно то вот:
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
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@s1dney
Действительно, жесть, лучше не скажешь.
Зачем так делать вообще? Прикрутите эти нулевые строки на стороне, обрабатывающей этот результат, зачем издеваться над mysql?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы