[ТЕМА ЗАКРЫТА]
Опции темы
22.10.2014 13:34  
Mtirt
1. Это "реализация" за конкретную дату. Что будет, если нужно будет посчитать за период? За месяц, например?
2. Мне не нравится вложенный запрос. Я вообще не понимаю, зачем он здесь нужен. У тебя в предыдущем запросе было соединение таблиц smspec и smdocuments. Используй его.
3. Я просила отнять возвраты по кассе. Ты их сложил с общей реализацией. (Подсказки: union all, decode (относятся к двум разным способам расчета)).
4. Условие на группу товаров (которое не получилось и ты его закомментировал).
Если нам надо будет выбрать по всем товарам группы первого уровня?
Часто в этой ситуации используется конструкция в виде "crd.idclass in (select is from sacardclass where tree like '2.%')".
Разбери её, посмотри, что и за что отвечает...
 
"Спасибо" Mtirt от:
24.10.2014 11:42  
BotMan
Код:
select sp.article, sp.doctype, sp.docid

from smspec sp, smcard crd, smdocuments s

where (sp.doctype = 'CS' and sp.doctype = 'CR')
and s.id=sp.docid
and createdat between '&date1' and '&date2'
and sp.article = crd.article
and crd.idclass in (select idclass from sacardclass where tree like '1.%')
короче теряюсь в догадках....
 
24.10.2014 11:55  
Mtirt
1. Где-то совсем потерялось количество...
2. Условие (sp.doctype = 'CS' and sp.doctype = 'CR') выполняться не будет никогда. У документа не может быть одновременно и тип 'CS', и тип 'CR'. Варианты исправления:
(sp.doctype = 'CS' OR sp.doctype = 'CR')
или
sp.doctype IN ('CS', 'CR').
3. То же замечание, которое было в прошлом задании, почему связываешь smspec и smdocuments только по номеру документа?
4. Почему createdat без псевдонима?
 
24.10.2014 12:17  
BotMan
Код:
select sp.article, sp.doctype, sp.docid, sp.quantity

from smspec sp, smcard crd, smdocuments s

where (sp.doctype = 'CS'  or sp.doctype = 'CR')
and s.id=sp.docid
and s.createdat between '&date1' and '&date2'
and sp.article = crd.article
and crd.idclass in (select idclass from sacardclass where tree like '1.%')
опечатка была с OR

а createdat без псевдонима выполняется, вот и не поставил.
у меня не получается сложить отдельно CS отдельно CR и потом отнять!!!!
 
24.10.2014 12:33  
Mtirt
Цитата:
опечатка была с OR
Про OR, с точки зрения читаемости запроса и скорости выполнения, предпочтительно использовать sp.doctype IN ('CS', 'CR').

Пропустил 3 пункт замечаний из предыдущего сообщения.

Цитата:
у меня не получается сложить отдельно CS отдельно CR и потом отнять!!!!
Вариант 1:
Вместо sp.quantity пишем конструкцию
Код:
decode(sp.doctype, 'CS', sp.quantity, 'CR', -sp.quantity)
Получаем значение sp.quantity в зависимости от типа документа с разными знаками.
Предлагаю почитать описание функций nvl(), decode() и конструкции case. Придумать примеры использования в запросах.
Вариант 2:
Конструкция union all (внешнее объединение)
Пишем 2 запроса (я упрощаю, пишу только ключевые для понимания запроса поля, хотя нужны все)
Код:
select sp.quantity where sp.doctype= 'CS'
union all
select -sp.quantity where sp.doctype= 'CR'
Правда опять таки, с точки зрения скорости вариант 1 лучше. Но для обучения лучше знать оба варианта.
 
"Спасибо" Mtirt от:
24.10.2014 12:56  
OlegON
sum(CS)-sum(CR) ? :)
 
24.10.2014 13:06  
Mtirt
До sum мы еще не дошли :) Это следующий этап в нашем задании...
 
24.10.2014 13:38  
OlegON
извини, но мне кажется, что decode в данном случае сильно ресурсоемкая ерунда :( проц враз ляжет.
 
24.10.2014 13:43  
Mtirt
Твой вариант?
 
24.10.2014 17:06  
BotMan
select sp.article, sp.doctype, sp.docid, decode(sp.doctype, 'CS', sp.quantity, 'CR', -sp.quantity)

from smspec sp, smcard crd, smdocuments s

where sp.doctype IN ('CS', 'CR')
and s.id=sp.docid
and sp.doctype = s.doctype
and s.createdat between '&date1' and '&date2'
and sp.article = crd.article
and crd.idclass in (select idclass from sacardclass where tree like '1.%')
 
 


Опции темы



Часовой пояс GMT +3, время: 01:20.

Все в прочитанное - Календарь - RSS - - Карта - Вверх 👫 Яндекс.Метрика
Форум сделан на основе vBulletin®
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.