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

Откуда:
Сообщений: 11
не понимаю в чем ошибка. ткните носом, будьте любезны

SELECT @sh_placers_box= SUM(amo) 
 from dbo.shipments
 INNER JOIN goods_full ON shipments.good_id=goods_full.good_id
 where amo  (SELECT  amo = 
  CASE 
	WHEN (amo >= box_standart) then (CAST (amo as int) % box_standart) 
	ELSE (amo)
	END	) 

amo - real поле с кол-вом товара в штуках
box_standart - int, кол-во штук в коробках
Запрос должен высчитывать поле амо в коробках и суммировать.

на выходе получаю @sh_placers_box = 0, хотя таблица в подзапросе составляется нормально. Ощущение что здесь чегото принципиально неправильно.
22 ноя 11, 08:44    [11635639]     Ответить | Цитировать Сообщить модератору
 Re: вложенные селекты  [new]
n0vember
Member

Откуда:
Сообщений: 11
еще и скопипастил криво.

 SELECT @sh_placers_box= SUM(amo) 
 from dbo.shipments
 INNER JOIN goods_full ON shipments.good_id=goods_full.good_id
 where amo = (SELECT  amo = 
  CASE 
	WHEN (amo >= box_standart) then ((CAST (amo as int) % box_standart) / box_standart) 
	ELSE (amo/box_standart)
	END	) 
	

както так
22 ноя 11, 08:46    [11635650]     Ответить | Цитировать Сообщить модератору
 Re: вложенные селекты  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Ошибка тут :)

where amo (SELECT amo =
22 ноя 11, 08:51    [11635657]     Ответить | Цитировать Сообщить модератору
 Re: вложенные селекты  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
n0vember
Ощущение что здесь чегото принципиально неправильно.
Принципиально неправильно то, что вы накладываете неправильное условие на выборку записей.

"where amo = (SELECT amo = " означает, что вы выбираете из shipments только те записи, у которых amo равно выражению справа.

Есть такие записи или нет, и вообще чему равно выражение, легко понять из такого запроса:

SELECT	amo,
	CASE 
		WHEN (amo >= box_standart) then ((CAST (amo as int) % box_standart) / box_standart) 
		ELSE (amo/box_standart)
	END as calculate_amo
 from dbo.shipments
 INNER JOIN goods_full ON shipments.good_id=goods_full.good_id
И ещё рекомендую использовать алиасы, а то непонятно, какое поле откуда.

Если вы хотели просто получить сумму выражения, а не накладывать ограничение, то нужно писать так:
SELECT @sh_placers_box= SUM(
	CASE 
		WHEN (amo >= box_standart) then ((CAST (amo as int) % box_standart) / box_standart) 
		ELSE (amo/box_standart)
	END
	) 
from dbo.shipments
INNER JOIN goods_full ON shipments.good_id=goods_full.good_id
22 ноя 11, 08:56    [11635669]     Ответить | Цитировать Сообщить модератору
 Re: вложенные селекты  [new]
n0vember
Member

Откуда:
Сообщений: 11
alexeyvg
благодарю, то что нужно. совсем логику sql забыл.
Алиасы нужны, до них тоже руки дойдут.
22 ноя 11, 09:50    [11635791]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить