Jun
Jun

Вопрос по выборке... SQL

У меня есть выборка
SELECT DAY(Request.mDate),COUNT(Request.Id) ,SUM(Request.SummAll)
WHERE (Request.mDate BETWEEN '20121001' AND '20121101')
GROUP BY DAY(Request.mDate)

chislo | summa | kolichestvo obrasheniy
3 | 10 | 1
5 | 30 | 1
15 | 8 | 2
28 | 21 | 1

Нужно сделать выборку за каждый день месяца и если нет значений за это число - ставить NULL
тоесть должно получиться следущее:

1 | NULL | NULL
2 | NULL | NULL
3 | 10 | 1
4 | NULL | NULL
5 | 30 | 1
и. т. д.
покажите пожалуйста как такое делается?

ВГ
Вячеслав Гостев

сделай сначала UPDATE в ячейки где нет значений на NULL, потом SELECT'ом выбирай....

ЛБ
Леонид Беляев

пиши процедурку с циклом. более умного чето ничего в голову не приходит. по крайней мере с утра.

СГ
Сергей Горохов

Напрямую функционал чистого SQL такое, насколько я знаю, вряд ли сможет предоставить. Основная проблема в том, что нужно проверять соответствие числам месяца, которые в базе не существуют. Значит, их надо сгенерировать искусственно.
К варианту с циклом, где будет соответственно 30 селектов на каждое число, могу добавить вариант с одним (хоть и немного извращённым) запросом:

Получаем запросом цифры от 1 до 30, например селектом из любой таблицы, где есть столько записей (Предположим, что исходные данные все в таблице Tbl_Temp):

SELECT RowNum AS N FROM Tbl_Temp WHERE RowNum < 30
(синтаксис PLSQL, переделайте, если надо, на другой диалект)

После чего делаем LEFT JOIN на нужную таблицу по полю с числом месяца. В целом это будет примерно так:

SELECT A.N, B.sCOL, B.sSUM FROM
(SELECT RowNum AS N FROM Tbl_Temp WHERE RowNum < 30) A

LEFT JOIN

(SELECT DAY(Request.mDate) AS N,COUNT(Request.Id) AS sCOL, SUM(Request.SummAll) AS sSUM FROM Tbl_Temp
WHERE (Request.mDate BETWEEN '20121001' AND '20121101') ) B
ON A.N = B.N
ORDER BY A.N

Альтернатива операторам JOIN - конструкция CASE WHEN, с ней можно будет вместо NULL в конечном результате поставить любое значение.

Похожие вопросы
SQL не импортируется (
Вопрос по поводу выборки из 2-х таблиц
Помогите с выборкой!
Собеседование по SQL. Накидайте пожалуйста примерные вопросы, которые могут задать на собеседовании по SQL
Sql запросы. Выборка данных Select.
помощь с Sql запросом, выборка из двух таблиц
Вопрос по PHP, как внедрить sql запрос?
Подскажите про ВЫБОРКУ в EXCEL
Выборка с базы Mysql
SQL Server. Помогите ответить на вопрос SQL Server. Выборка данных из БД SQL Server 2008. Примеры