Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите с запросом  [new]
Одмин_007
Guest
Есть запрос:
select  (Kolvo*Cena) as summa , DatePart(Month,DateP) as month_num from tbl1
where DatePart(Year,DateP)=DatePart(Year,GetDate())

Результат этого запроса:

summamonth_num
2.521
0.721
1.081
9.801
11.041
230.401
2230.002
4889.802
912.002
18.003
133.003
3000.005
2970.005
3480.005


Получается что данных за 4-й месяц нету вообще. Мне надо переделать запрос так чтобы если данных нет за какой то месяц выводить - 0 .
10 сен 09, 15:29    [7642906]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Таблица-календарь есть?
10 сен 09, 15:44    [7643016]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
SELECT M.MonthNo, ISNULL(T.Kolvo*T.Cena,0) summa
FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) M(MonthNo)
LEFT JOIN tbl1 T ON M.MonthNo=MONTH(T.DateP)
WHERE T.DateP>=STR(YEAR(GETDATE())) AND T.DateP<STR(YEAR(GETDATE())+1);
10 сен 09, 15:46    [7643029]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
делайте вспомогательную таблицу с датами или мм.гггг, а далее left outer join этой таблицы с вашей выборкой из tbl1 по полю с мм.гггг
10 сен 09, 15:46    [7643033]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
И версия сервера какая??
10 сен 09, 15:47    [7643034]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Одмин_007
Guest
iap
SELECT M.MonthNo, ISNULL(T.Kolvo*T.Cena,0) summa
FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) M(MonthNo)
LEFT JOIN tbl1 T ON M.MonthNo=MONTH(T.DateP)
WHERE T.DateP>=STR(YEAR(GETDATE())) AND T.DateP<STR(YEAR(GETDATE())+1);


не помогает... ((

iap
И версия сервера какая??


Microsoft SQL Server 2000 - 8.00.2040 (Intel X86) May 13 2005 18:33:17 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
10 сен 09, 15:54    [7643080]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Роман Дынник
Member

Откуда:
Сообщений: 3324
iap,
пусть человек сразу сделает нормальную вспомогательную таблицу.
10 сен 09, 15:55    [7643090]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
iap
LEFT JOIN tbl1 T
WHERE T.DateP>=
Не ожидал
10 сен 09, 15:56    [7643097]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Роман Дынник
iap,
пусть человек сразу сделает нормальную вспомогательную таблицу.
Если ему готовое решение не помогает, то уже ничего не поможет. IMHO
10 сен 09, 15:58    [7643109]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Паганель
iap
LEFT JOIN tbl1 T
WHERE T.DateP>=
Не ожидал
Чего именно?
10 сен 09, 15:59    [7643117]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
iap
Паганель
iap
LEFT JOIN tbl1 T
WHERE T.DateP>=
Не ожидал
Чего именно?

Наверное WHERE для правой таблицы из LEFT JOIN-а
10 сен 09, 16:00    [7643129]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
Паганель
iap
LEFT JOIN tbl1 T
WHERE T.DateP>=
Не ожидал
Чего именно?
Эх!
SELECT M.MonthNo, ISNULL(T.Kolvo*T.Cena,0) summa
FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) M(MonthNo)
LEFT JOIN tbl1 T ON M.MonthNo=MONTH(T.DateP)
AND T.DateP>=STR(YEAR(GETDATE())) AND T.DateP<STR(YEAR(GETDATE())+1);
10 сен 09, 16:01    [7643135]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
iap
Паганель
iap
LEFT JOIN tbl1 T
WHERE T.DateP>=
Не ожидал
Чего именно?
Эх!
SELECT M.MonthNo, ISNULL(T.Kolvo*T.Cena,0) summa
FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) M(MonthNo)
LEFT JOIN tbl1 T ON M.MonthNo=MONTH(T.DateP)
AND T.DateP>=STR(YEAR(GETDATE())) AND T.DateP<STR(YEAR(GETDATE())+1);
А ещё лучше, наверно, так:
SELECT M.MonthNo, ISNULL(T.Kolvo*T.Cena,0) summa
FROM (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) M(MonthNo)
LEFT JOIN tbl1 T ON T.DateP>=STR(10000*YEAR(GETDATE())+100*M.MonthNo+1) AND T.DateP<STR(10000*YEAR(GETDATE())+100*M.MonthNo+101);
10 сен 09, 16:09    [7643211]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Одмин_07
Guest
Спасибо!
А еще можно?
чтобы только до текущего месяца...10,11,12 ненадо
10 сен 09, 16:27    [7643371]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить