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

Откуда: Novosibirsk
Сообщений: 29
Доброго времени суток. Ничего я не нашел на форуме и ошибку у себя в коде тоже, прошу помощи. Может кто увидит косяк.
Задача, в соответствии от номера склада вывести поля rash и prih

		select dat,sum(prih) prih,sum(rash) rash 
        from(select convert(datetime,round(convert(float,SklDcs_Dat)-0.5,0)) dat,
 				(case skldcs_StorCd when 65535 then
                                 (
                                   (case SklDcs_Mov when 0 then skldcs_qtosn else 0 end) rash, 
                                   (case SklDcs_Mov when 1 then skldcs_qtosn else 0 end) prih)
                                 )
				when 6 then ((case SklDcs_Mov when 0 then skldcs_qtosn else 0 end) rash,0 prih) 
                                
                                end
				)
        from skldcs where  SklDcs_StorCd in(6, 65535)) q 
        where dat>='2011-10-21' and dat<= '2011-10-25'
        group by dat order by dat 

Ошибка вида
Server: Msg 102, Level 15, State 1, Line 4
Incorrect syntax near 'rash'.
Буду признателен за любую помощь!
27 окт 11, 06:14    [11506365]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Так а зачем вы там понаписали rash и prih, запятых понаставили? Правильно ругается.
27 окт 11, 06:50    [11506379]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
aleks2
Guest
Case ... WHEN ... THEN !ТУТ_ДОПУСТИМО_ТОЛЬКО_ОДНО_СКАЛЯРНОЕ_ВЫРАЖЕНИЕ! ELSE ... END
27 окт 11, 06:57    [11506380]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
unit4
Member

Откуда: Novosibirsk
Сообщений: 29
aleks2, просто case же я могу вставить?
27 окт 11, 07:38    [11506409]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
unit4
Member

Откуда: Novosibirsk
Сообщений: 29
Гавриленко Сергей Алексеевич, так а что, алиасы вообще недопустимо ставить?
27 окт 11, 07:39    [11506411]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
unit4
Member

Откуда: Novosibirsk
Сообщений: 29
		select dat,sum(prih) prih,sum(rash) rash 
        from(select convert(datetime,round(convert(float,SklDcs_Dat)-0.5,0)) dat,
 				(case skldcs_StorCd when 65535 then(
											case SklDcs_Mov when 0 then skldcs_qtosn else 0 end)
				else (
						case SklDcs_Mov when 0 then skldcs_qtosn else 0 end) 
				end )rash,
				(Case skldcs_storCd when 65535 then(
											case SklDcs_Mov when 1 then skldcs_qtosn else 0 end) 
				else 0 
				end) prih
				
        from skldcs where  SklDcs_StorCd in(6, 65535)) q 
        where dat>='2011-10-21' and dat<= '2011-10-25'
        group by dat order by dat 
А так работает, но это ппц какая хрень %)
27 окт 11, 07:51    [11506421]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
select 
	dat
	,sum(case when StorCd = 65535 and SklDcs_Mov = 1 then skldcs_qtosn else 0 end) prih
	,sum(case when (StorCd = 6 and SklDcs_Mov = 0) or (StorCd = 65535 and SklDcs_Mov = 1) then skldcs_qtosn else 0 end) rash 
from(
	select 
		convert(datetime,round(convert(float,SklDcs_Dat)-0.5,0)) dat
		, skldcs_StorCd
		, skldcs_qtosn
		, SklDcs_Mov
	from 
		skldcs 
	where  
		SklDcs_StorCd in(6, 65535)) q 
where 
	dat>='2011-10-21' and dat<= '2011-10-25'
group by 
	dat 
order by 
	dat
?

PS: и не надо придумывать синтаксис
27 окт 11, 08:34    [11506489]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
select 
	dat
	,sum(case when StorCd = 65535 and SklDcs_Mov = 1 then skldcs_qtosn else 0 end) prih
	,sum(case when (StorCd = 6 and SklDcs_Mov = 0) or (StorCd = 65535 and SklDcs_Mov = 1) then skldcs_qtosn else 0 end) rash 
from(
	select 
		convert(datetime,round(convert(float,SklDcs_Dat)-0.5,0)) dat
		, skldcs_StorCd
		, skldcs_qtosn
		, SklDcs_Mov
	from 
		skldcs 
	where  
		SklDcs_StorCd in(6, 65535)) q 
where 
	dat>='2011-10-21' and dat<= '2011-10-25'
group by 
	dat 
order by 
	dat
?

PS: и не надо придумывать синтаксис
27 окт 11, 08:34    [11506490]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
aleks2
Guest
unit4
aleks2, просто case же я могу вставить?


Case ... WHEN ... THEN !ТУТ_ДОПУСТИМО_ТОЛЬКО_ОДНО_СКАЛЯРНОЕ_ВЫРАЖЕНИЕ! ELSE ... END as АЛИАС_ТУТА

1. Внутри Case назначение алиасов недопустимо.
2. Хоцца два алиаса => пишите два Case.
27 окт 11, 08:41    [11506504]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
unit4
Member

Откуда: Novosibirsk
Сообщений: 29
aleks2
unit4
aleks2, просто case же я могу вставить?


Case ... WHEN ... THEN !ТУТ_ДОПУСТИМО_ТОЛЬКО_ОДНО_СКАЛЯРНОЕ_ВЫРАЖЕНИЕ! ELSE ... END as АЛИАС_ТУТА

1. Внутри Case назначение алиасов недопустимо.
2. Хоцца два алиаса => пишите два Case.


ужо)
27 окт 11, 08:55    [11506531]     Ответить | Цитировать Сообщить модератору
 Re: CASE WHEN THEN CASE (Ругается на алиас)  [new]
unit4
Member

Откуда: Novosibirsk
Сообщений: 29
HandKot, ну так то гуд, я правда все равно извратился, вроде как должно и мое работать верно)
27 окт 11, 08:56    [11506533]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить