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

Откуда:
Сообщений: 9
есть 5 таблиц
1. Товары
ID - ИД товара (ключ) DESCR - Наименование

2. Приходы товаров (шапка)
IDDOC CLOSED - Проведен (зафиксирован) DATE

3. Приходы товаров (табличная часть)
IDDOC TOVID - ИД товара KOL SUM

4. Расходы товаров (шапка)
IDDOC CLOSED - Проведен (зафиксирован) DATE

5. Расходы товаров (табличная часть)
IDDOC TOVID - ИД товара KOL SUM

Смысл в том, чтобы после выполнения СКЛ-запроса сформировалась табличка остатков по каждому товару, с учетом даты прихода/расхода.

Пример результата:
DESCR SUM OF KOL SUM OF SUM
Товар №1 12.3 180.90
Товар №2 90.4 793.56


Делаю так:
SELECT TOV.DESCR, SUM(PRIHT.KOL) - SUM(RASHT.KOL), SUM(PRIHT.SUM) - SUM(RASHT.SUM)
FROM PRIHOD as PRIH, PRIHOD_T AS PRIHT, RASHOD AS RASH, RASHOD_T AS RASHT
LEFT JOIN TOVARY AS TOV ON TOVID = TOV.ID
WHERE CLOSED=1 AND PRIH.IDDOC = PRIHT.IDDOC AND RASH.IDDOC = RASHT.IDDOC AND PRIH."DATE" <= "01.05.12" AND RASH."DATE" <= "01.05.12"
GROUP BY TOV.DESCR
12 июн 12, 14:35    [12702398]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить остатки товаров запросом из нескольких таблиц  [new]
denissaha
Member

Откуда:
Сообщений: 9
Прошу прощения, так и не задал вопрос. Так вот, при выполнении выше запроса из сабжа, результат совсем не тот. То есть товары-то выбираются, но количество и сумма не совпадают абсолютно с реальными числами
12 июн 12, 14:39    [12702427]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить остатки товаров запросом из нескольких таблиц  [new]
aleks2
Guest
1. Может стоит переквалифицироваться в управдомы?
2. Если всеж мечта стать T-SQL-программером неистребима - уберите GROUP BY TOV.DESCR и помедитируйте над результатом запроса.
12 июн 12, 15:08    [12702585]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить остатки товаров запросом из нескольких таблиц  [new]
denissaha
Member

Откуда:
Сообщений: 9
aleks2,

Вряд ли СКЛ даст выполнить это запрос без GROUP BY
12 июн 12, 15:12    [12702600]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить остатки товаров запросом из нескольких таблиц  [new]
zk96
Member

Откуда:
Сообщений: 9
А что до "01.05.12" приходов-расходов не было? Ведь все что было до этого числа в результирующую табличку не попадет.
12 июн 12, 15:17    [12702632]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить остатки товаров запросом из нескольких таблиц  [new]
denissaha
Member

Откуда:
Сообщений: 9
zk96
А что до "01.05.12" приходов-расходов не было? Ведь все что было до этого числа в результирующую табличку не попадет.


Да вот не пойму где проблема, но в табличку как раз попадают товары из приходов/расходов до указанной даты, но в колонках SUM of KOL и SUM of SUM какие-то бешенные числа :-)

Думаю, где-то я ошибся в условиях WHERE, но не пойму где.
12 июн 12, 15:24    [12702665]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить остатки товаров запросом из нескольких таблиц  [new]
zk96
Member

Откуда:
Сообщений: 9
Можно так, если не ошибаюсь.
select 
	ret.TOVID TOVID
	,TOV.DESCR
	,ret.KOL KOL
	,ret.SUM SUM
from 
(
select 
	d.TOVID TOVID
	,sum(d.KOL) KOL
	,sum(d.SUM) SUM
from 
(
SELECT 
	PRIHT.TOVID TOVID
	,PRIHT.KOL KOL
	,PRIHT.SUM SUM
FROM PRIHOD_T AS PRIHT
INNER JOIN PRIHOD as PRIH ON PRIH.IDDOC = PRIHT.IDDOC
WHERE PRIH.CLOSED=1 AND PRIH.DATE <= "01.05.12"
UNION ALL
SELECT 
	PRIHT.TOVID
	,PRIHT.KOL
	,PRIHT.SUM
FROM RASHOD_T AS RASHT
INNER JOIN RASHOD AS RASH ON RASHT.IDDOC = RASH.IDDOC
WHERE RASH.CLOSED=1 AND RASH.DATE <= "01.05.12"
)as d
group by d.TOVID
) as ret
LEFT JOIN TOVARY AS TOV ON ret.TOVID = TOV.ID
12 июн 12, 16:03    [12702878]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо вычислить остатки товаров запросом из нескольких таблиц  [new]
Олегон
Member

Откуда: Казахстан, Алматы
Сообщений: 80
denissaha
Делаю так:
SELECT TOV.DESCR, SUM(PRIHT.KOL) - SUM(RASHT.KOL), SUM(PRIHT.SUM) - SUM(RASHT.SUM)
FROM PRIHOD as PRIH, PRIHOD_T AS PRIHT, RASHOD AS RASH, RASHOD_T AS RASHT
LEFT JOIN TOVARY AS TOV ON TOVID = TOV.ID
WHERE CLOSED=1 AND PRIH.IDDOC = PRIHT.IDDOC AND RASH.IDDOC = RASHT.IDDOC AND PRIH."DATE" <= "01.05.12" AND RASH."DATE" <= "01.05.12"
GROUP BY TOV.DESCR


Мне кажется, что запрос не рабочий.
Выше, конечно, ужасно приведена информация о структуре, но думаю, что:
Ambiguous column name 'CLOSED'.
Ambiguous column name 'TOVID'.

Приведи структуру таблиц, как инструкции create table.

Ну а так, кажется, не хватает условия TOVID = TOV.ID для таблицы расходов, TOVID = TOV.ID для таблицы приходов.

Или сделай select * для этого запроса, и увидишь, что у тебя не так в этой выборке.
13 июн 12, 07:11    [12705387]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить