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

Откуда: Азербайджан, г. Баку
Сообщений: 1382
запускаю процедуру

exec analiz2_1 @God=2003, @Tarix1_1='20030101', @Tarix1_2='20030301',@Tarix2_1='20030301', @Tarix2_2='20030601', @Jurnallar=',1,2,'


CREATE PROCEDURE dbo.analiz2_1
@God int, @Tarix1_1 varchar(8), @Tarix1_2 varchar(8),
@Tarix2_1 varchar(8), @Tarix2_2 varchar(8), @Jurnallar varchar(255),
@icra bit=null, @musbet bit=null, @tesdiq bit=null, @ltedbir bit=null, @lgosteris bit=null, @nezaret bit=null, @cavab bit=null, @gebul bit=null
AS
SELECT dbo.v_DOS.kod_jurnal, dbo.v_DOSqm.kod_qm,
sum(case
when dbo.v_DOS.sdot BETWEEN @Tarix1_1 AND @Tarix1_2 then 1
else 0
end) as sum1,
sum(case
when dbo.v_DOS.sdot BETWEEN @Tarix2_1 AND @Tarix2_2 then 1
else 0
end) as sum2
FROM dbo.v_DOSqm INNER JOIN
dbo.v_DOS ON dbo.v_DOSqm.Kod_DOS = dbo.v_DOS.Kod_DOS
WHERE dbo.v_DOS.il = @God and
dbo.v_dos.icra=isnull(@icra,dbo.v_dos.icra) and dbo.v_dos.musbet=isnull(@musbet,dbo.v_dos.musbet) and
dbo.v_dos.cavab=isnull(@cavab,dbo.v_dos.cavab) and dbo.v_dos.gebul=isnull(@gebul,dbo.v_dos.gebul)
and @Jurnallar like '%,'+rtrim(ltrim(dbo.v_DOS.kod_jurnal))+',%'
group by dbo.v_DOS.kod_jurnal, dbo.v_DOSqm.kod_qm
order by dbo.v_DOS.kod_jurnal, dbo.v_DOSqm.kod_qm
GO



Не находит ни одной записи, но если убрать эти строки, то все нормально
and dbo.v_dos.musbet=isnull(@musbet,dbo.v_dos.musbet) and
dbo.v_dos.cavab=isnull(@cavab,dbo.v_dos.cavab) and dbo.v_dos.gebul=isnull(@gebul,dbo.v_dos.gebul)
8 янв 04, 16:39    [484460]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает Select  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Может у вас в полях dbo.v_dos.musbet, dbo.v_dos.cavab,dbo.v_dos.gebul есть NULLы? И тогда сравнение NULL = NULL вернет UNKNOWN, и запись не попадет в выборку?
8 янв 04, 16:48    [484479]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает Select  [new]
Samir
Member

Откуда: Азербайджан, г. Баку
Сообщений: 1382
Да Вы правы. В этих полях есть значение NULL.

А как от этого избавиться?
8 янв 04, 16:50    [484487]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает Select  [new]
Samir
Member

Откуда: Азербайджан, г. Баку
Сообщений: 1382
так сойдет?

isnull(musbet,0)=isnull(@musbet,isnull(musbet,0))
8 янв 04, 16:54    [484498]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает Select  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Всмысле? Как избавиться от пустых значений - заполните их. А если вы имеете в виду, как обработать NULL в вашем запросе, то попробуйте еще раз ISNULL(dbo.v_dos.musbet, 0). А к какму значение приводить 0 или 1 решайте сами.
8 янв 04, 16:55    [484501]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает Select  [new]
Samir
Member

Откуда: Азербайджан, г. Баку
Сообщений: 1382
Все заработало, но вот еще выходит такой результат

1 - 25 - 12 - 23
2 - 23 - 0 - 0
3 - 32 - 1 - 0

как избавиться от записей в которых sum1=0 и sum2=0, т.е. от записи
2 - 23 - 0 - 0 ?
8 янв 04, 17:08    [484530]     Ответить | Цитировать Сообщить модератору
 Re: неправильно работает Select  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
GROUP BY ...

HAVING
sum(case when dbo.v_DOS.sdot BETWEEN @Tarix1_1 AND @Tarix1_2 then 1 else 0 end) <> 0 AND
sum(case when dbo.v_DOS.sdot BETWEEN @Tarix2_1 AND @Tarix2_2 then 1 else 0 end) <> 0
ORDER BY ...
9 янв 04, 08:04    [484989]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить