Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
есть запрос
select c.customerid,login,custname,speed,speed,v.type,
isnull(sum(case when b.type=0 then (b.amount+b.vatamount) end),0) amount, 
isnull(sum(b.amount+b.vatamount),0) amount1,
case when currencyid=0 then 'Сум' when currencyid=1 then 'USD' else 'DoNotKnow' end Currency
from login l
	join balance1 b on l.item=b.item 
	join customeritems1 c on l.item=c.item
	join package1 p on c.item=p.item and p.todate='9999-01-01'
	join rateplan r on p.priceid=r.priceid
	join vw_curcustname v on v.customerid=c.customerid
where login like '%@vpn' and l.todate='9999-01-01' and l.item<>0
and b.enterdate>='2009-11-01' and b.enterdate<'2009-12-01' and b.status not in (254,255)
group by c.customerid,login,custname,speed,v.type,
case when currencyid=0 then 'Сум' when currencyid=1 then 'USD' else 'DoNotKnow' end
order by 1

логинов в таблице больше но так как они не попадают в период начисление b.enterdate>='2009-11-01' and b.enterdate<'2009-12-01' количество строк уменьшается
как сделать если в таблице balance1 нет такого периода у определенного логина то выводить NULL
15 дек 09, 11:18    [8067684]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
aleks2
Guest
Изучить LEFT/RIGHT OUTER JOIN?
15 дек 09, 11:19    [8067694]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
вот именно не получается
15 дек 09, 11:20    [8067701]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
718
вот именно не получается

И как это выглядит ?
15 дек 09, 11:21    [8067703]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
так как в таблице balance1 за этот период нет таких item ов вообще
15 дек 09, 11:22    [8067707]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
Glory,

например так
select c.customerid,login,custname,speed,v.type,l.item into #1
from login l
	join customeritems1 c on l.item=c.item
	join package1 p on c.item=p.item and p.todate='9999-01-01'
	join rateplan r on p.priceid=r.priceid
	join vw_curcustname v on v.customerid=c.customerid
where login like '%@vpn' and l.todate='9999-01-01' and l.item<>0
group by c.customerid,login,custname,speed,speed,v.type,l.item
order by 1,2




select*
from #1 a left join balance1 b on a.item=b.item
where b.enterdate>='2009-11-01' and b.enterdate<'2009-12-01' and b.status not in (254,255)


drop table #1
15 дек 09, 11:23    [8067716]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
А почему в where вынесен фильтр по таблице balance1 ?
15 дек 09, 11:25    [8067732]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
потому что мне надо начисление именно за этот период
15 дек 09, 11:27    [8067744]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
718
потому что мне надо начисление именно за этот период

Вопрос был не зачем нужен фильтр по периоду, а почему этот фильтр находится в части where
15 дек 09, 11:29    [8067752]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
Glory,

а где еще?
если вы имеете в веду что надо было в join писать условия то все равно у меня не получается,
возможно я делаю что то не то?


select c.customerid,login,custname,speed,v.type,l.item into #1
from login l
	join customeritems1 c on l.item=c.item
	join package1 p on c.item=p.item and p.todate='9999-01-01'
	join rateplan r on p.priceid=r.priceid
	join vw_curcustname v on v.customerid=c.customerid
where login like '%@vpn' and l.todate='9999-01-01' and l.item<>0
--and b.enterdate>='2009-11-01' and b.enterdate<'2009-12-01' and b.status not in (254,255)
group by c.customerid,login,custname,speed,speed,v.type,l.item
order by 1,2




select a.customerid,login,custname,speed,a.type,
isnull(sum(case when b.type=0 then (b.amount+b.vatamount) end),0) amount, 
isnull(sum(b.amount+b.vatamount),0),
case when currencyid=0 then 'Сум' when currencyid=1 then 'USD' else 'DoNotKnow' end Currency
from #1 a RIGHT OUTER JOIN balance1 b on a.item=b.item and b.enterdate>='2009-11-01' and b.enterdate<'2009-12-01' and b.status not in (254,255)
group by a.customerid,login,custname,speed,a.type,
case when currencyid=0 then 'Сум' when currencyid=1 then 'USD' else 'DoNotKnow' end


drop table #1
15 дек 09, 11:34    [8067791]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
Вы тасуете запрос, как колоду карт. То у вас inner join, то right outer
15 дек 09, 11:37    [8067806]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
Glory,

может укажите где конкретно я не так пишу запрос и ка надо? буду благодарен
15 дек 09, 11:41    [8067834]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
718
Glory,

может укажите где конкретно я не так пишу запрос и ка надо? буду благодарен

Сказали же. нуже left join со всеми фильтрами в on а не в where. Что непонятного ?
15 дек 09, 11:44    [8067858]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
718
Member

Откуда: Tashkent
Сообщений: 319
Glory,

Спасибо огромное
что то я не внимательный :(
15 дек 09, 11:47    [8067874]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить