Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Помогите разобраться с запросом   Найти похожие ветки 

 
V-A-V ©   (2005-09-29 11:03) [0]

Есть две таблицы:
1.
Tovar – список товаров
 Id  –  ключ
 Name – наименование
2. jrOper – журнал операций по товарам
 Id – ключ
 Tovar_Id – связка с Id Tovar
 isPrihod – Boolean (приход или расход)
 Kol – количество товара

Задача:
Нужно одним запросом выбрать сколько всего каждого товара пришло и израсходовано.

Я сделал две хранимых процедуры которые выбирают отдельно приход и расход из журнала

jrPrih:
SELECT j.* FROM jrOper AS j WHERE j.isPrihod;jrRash:
SELECT j.* FROM jrOper AS j WHERE not j.isPrihod;

Затем попытался сделать выборку одним запросом
Текст моего запроса:

SELECT t.Name, Sum(jp.Kol) as KolPrih, Sum(jr.Kol) as KolRash
FROM (Tovar as t Inner Join ijPrih as jp On t.Id = jp.Tovar_Id)
           Inner JOIN jrRash as jr On t.Id = jr.Tovar_Id
GROUP BY t.Name

Этот запрос выдает неверное количество прихода и расхода. Если запрашивать по отдельность двумя запросами, то количества выдаются верно.  

SELECT t.Name, Sum(jp.Kol) as KolPrih
FROM Tovar as t Inner Join ijPrih as jp On t.Id = jp.Tovar_Id
GROUP BY t.Name

и
SELECT t.Name, Sum(jr.Kol) as KolRash
FROM Tovar as t  Inner JOIN jrRash as jr On t.Id = jr.Tovar_Id
GROUP BY t.Name

Где я не прав и как исправить ошибку


 
msguns ©   (2005-09-29 11:19) [1]

SELECT id, SUM(KolP) AS Prihod, SUM(KolR) AS Rashod FROM
(SELECT id, 0 AS KolP, SUM(Kol) AS KolR FROM jrOPER
  WHERE isPrihod=false
 SELECT id, SUM(Kol) AS KolP, 0 AS KolR FROM jrOPER
  WHERE isPrihod=true)


 
msguns ©   (2005-09-29 11:21) [2]

Пардон

SELECT id, SUM(KolP) AS Prihod, SUM(KolR) AS Rashod FROM
(SELECT id, 0 AS KolP, SUM(Kol) AS KolR FROM jrOPER
 WHERE isPrihod=false
UNION
SELECT id, SUM(Kol) AS KolP, 0 AS KolR FROM jrOPER
 WHERE isPrihod=true)


 
ANB ©   (2005-09-29 11:50) [3]


> V-A-V ©   (29.09.05 11:03)
- хранимка тут не нужна.
А по сабжу -
> msguns ©   (29.09.05 11:21) [2]

уже все написал. Если только в одну строку надо (
Товар, остаток на начало, приход, расход, остаток на конец
), тогда по другому чуть придется. Но тогда без вложенных запросов не обойтись. А акссес их поддерживает ?


 
V-A-V ©   (2005-09-29 12:04) [4]

> msguns ©   (29.09.05 11:21) [2]

union меня не устраивает, все надо в одну строку

> ANB ©   (29.09.05 11:50) [3]

Не хотелось бы использовать вложенные запросы, тогда запрос получается грамоздким и плохочитаемым, да и в примере я привел только получение сумм двух полей количества, а на самом деле надо около десятка сумм тащить из этого журнала по каждому товару
Поэтотому, то я и сделал две хранимых процедуры.


 
msguns ©   (2005-09-29 12:14) [5]

>V-A-V ©   (29.09.05 12:04) [4]

Запрос-то выполни, а ? А процедуры в топку ;)


 
sniknik ©   (2005-09-29 12:24) [6]

SELECT Name, Sum(iif(isPrihod, Kol, 0)) as KolPrih, Sum(iif(isPrihod, 0, Kol)) as KolRash
FROM jrOper
GROUP BY Name


 
ANB ©   (2005-09-29 12:28) [7]


> а на самом деле надо около десятка сумм тащить из этого
> журнала по каждому товар
- откуда десяток то ?


 
sniknik ©   (2005-09-29 12:31) [8]

а ну да, сорру

SELECT t.Name, Sum(iif(o.isPrihod, Kol, 0)) as KolPrih, Sum(iif(o.isPrihod, 0, Kol)) as KolRash
FROM jrOper AS o INNER JOIN Tovar as t ON o.Tovar_Id = o.Id
GROUP BY t.Name


правильнее, если опять не запутался ;)


 
V-A-V ©   (2005-09-29 12:45) [9]

> msguns ©   (29.09.05 12:14) [5]
> Запрос-то выполни, а ? А процедуры в топку ;)

Пардон, скобки то я и не заметил. Если так то действительно хранимые можно в печь, либо подзапрос ооформить в виде процедуры для читаемости.

> sniknik ©   (29.09.05 12:31) [8]

iif в самом Access  проходит, а вот в Дельфине в AdoQury нет, почемуто ????


 
sniknik ©   (2005-09-29 13:19) [10]

> iif в самом Access  проходит, а вот в Дельфине в AdoQury нет, почемуто ????
высказать предположение? о максмально возможной кривизне рук для его использования? ;о))

смени провайдера.


 
sniknik ©   (2005-09-29 13:20) [11]

в смысле OLEDB провайдера, а не интернета ;)


 
V-A-V ©   (2005-09-29 13:33) [12]

> смени провайдера.

а где его взять

в данный момент у меня
Provider=Microsoft.Jet.OLEDB.4.0


 
msguns ©   (2005-09-29 13:37) [13]

Убей, не пойму, чем не нравится [2]. Тем более, что по этой "рыбе" можно состряпать запрос, считающий оборотно-сальдовую, т.е. остатки на начало+приход+расход+остатки на конец за любой период.


 
Sergey13 ©   (2005-09-29 13:41) [14]

2[13] msguns ©   (29.09.05 13:37)
>Убей, не пойму, чем не нравится [2].
Group By -ев не хватает. Не работает. 8-)


 
V-A-V ©   (2005-09-29 14:06) [15]

> Убей, не пойму, чем не нравится [2].

да все нравится, спасибо уже все наладил и все шкворчит как надо.
просто разговор зашел уже об iif - е


 
sniknik ©   (2005-09-29 16:20) [16]

> в данный момент у меня
> Provider=Microsoft.Jet.OLEDB.4.0
Jet iif поддерживает. (хотя может в "Дельфине" какойто другой Jet? Переходи на Delphi там тот что надо ;о))

> просто разговор зашел уже об iif - е
это не разговор, а жалоба. разговор это когда аргументированно с указанием, как и что (как делаеш и что происходит/ошибки, описание...)

по запросу. вот так наверно быстрее всего получится... (сравнить надо на больших обьемах. и точнее (даже если товар "потеряется"(запись), а инфа о расходах не "уплывет" (правда не пойми что в расходе приходе будет... ;)))
SELECT t.Id, t.Name, s.KolPrih, s.KolRash FROM
 (SELECT Tovar_Id, Sum(iif(isPrihod, Kol, 0)) as KolPrih, Sum(iif(isPrihod, 0, Kol)) as KolRash
 FROM jrOper
 GROUP BY Tovar_Id) AS s
LEFT JOIN Tovar AS t ON s.Tovar_Id = t.Id



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.041 c
2-1128064493
MirsaID
2005-09-30 11:14
2005.10.23
Не могу подключатся базы Access через ADO


1-1128015457
Volf_555
2005-09-29 21:37
2005.10.23
Как в RUN-TIME добавить новую вкладку в TPageControl?


1-1127921801
userrrrr
2005-09-28 19:36
2005.10.23
как опросить клавиотуру?


14-1128012098
TG
2005-09-29 20:41
2005.10.23
Flash


3-1126696752
leonidus
2005-09-14 15:19
2005.10.23
Почему не выполняется запрос с Join`ом ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский