Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
Ребят, не поможете осилить? Есть три таблицы: 1. Марка товара(Состав: Марка товара(Pr.Key)). 2. Приход товара(Состав: Марка товара(For.Key), Кол-во прихода). 3. Расход товара(Состав: Марка товара(For.Key), Кол-во расхода). Необх. составить выборку остатка, состав: Марка товара, остаток товара. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 12:45 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
Наверное что то типа этого Select МТ.НазваниеМаркиТовара, (Sum(ПТ.КолПрихода) - Sum(РТ.КолРасхода)) as ОстатокТовара from МаркаТовара МТ, ПриходТовара ПТ, РасходТовара РТ where МТ.МаркаТовараИД = ПТ.МаркаТовараИД and МТ.МаркаТовараИД = РТ.МаркаТовараИД Group by МТ.НазваниеМаркиТовара ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 13:02 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
IMHO нужно использовать LEFT JOIN, т.к. если у товара не было прихода и/или расхода, то он в выборку не попадет Select МТ.НазваниеМаркиТовара, (Sum(ПТ.КолПрихода) - Sum(РТ.КолРасхода)) as ОстатокТовара from МаркаТовара МТ left outer join ПриходТовара ПТ МТ.МаркаТовараИД = ПТ.МаркаТовараИД left outer join РасходТовара РТ and МТ.МаркаТовараИД = РТ.МаркаТовараИД Group by МТ.НазваниеМаркиТовара ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 13:15 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
Так делать нельзя - перемножение записей получиться. Вот так можно: Select МТ.НазваниеМаркиТовара, IsNull((select Sum(ПТ.КолПрихода) from ПриходТовара ПТ where МТ.МаркаТовараИД=ПТ.МаркаТовараИД),0) -IsNull((select Sum(РТ.КолРасхода) from РасходТовара РТ where МТ.МаркаТовараИД=РТ.МаркаТовараИД),0) as ОстатокТовара from МаркаТовара МТ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 13:31 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
2 Глеб Уфимцев А так разве нельзя? Select МТ.НазваниеМаркиТовара, (Sum(isnull(ПТ.КолПрихода,0)) - Sum(isnull(РТ.КолРасхода, 0))) as ОстатокТовара from МаркаТовара МТ left outer join ПриходТовара ПТ on МТ.МаркаТовараИД = ПТ.МаркаТовараИД left outer join РасходТовара РТ on МТ.МаркаТовараИД = РТ.МаркаТовараИД Group by МТ.НазваниеМаркиТовара ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 13:34 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
2 Глеб Уфимцев >Так делать нельзя - перемножение записей получиться. А что на что здесь будет перемножаться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 13:37 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
А так? select Марка, sum(Кол_во) from (select Марка Кол_во from Приход union select Марка -Кол_во from Расход ) as s group by Марка Вообще я обычно это через временные таблицы делаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 13:51 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
2 SergSuper Мне очень понравился Ваш вариант, если только не бывает ситуации, когда Марка есть а не было ни прихода ни расхода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 14:02 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
Спасибо за помощь ребята, выручили!!!!!!!!!!!!!! Судя по предварительным результатам, безошибочные цифры получились у Глеба Проверял все выборки составленных до SergSuper включ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 14:28 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
Genady! Specially for you select Марка, sum(Кол_во) from (select Марка, Кол_во from Приход union select Марка, -Кол_во from Расход union select Марка, 0 from Марка_товара) as s group by Марка Я хотел сразу так написать, да потом подумал что и так очевидно как это сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2001, 14:35 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
Раз был вопрос насчет перемножения записей, расскажу в чем дело. Для облегчения понимания упрощу. Имеем 3 таблицы: t(tovar) -список товаров - всего один товар (одна запись) p(tovar,prixod) - приходы товаров - всего два прихода того самого единственного товара по 2 ед. (две записи). Всего пришло, значит, 4 ед. r(tovar, rashod) - расходы товара - всего три расхода того же товара по 1 ед. (3 записи). Всего, значит, ушло 3 ед. Остаться, значит, должно 4-3=1 ед. Запрос типа select t.tovar, sum(prihod)-sum(rashod) ostatok from t left join p on t.tovar=p.tovar left join r on t.tovar=r.tovar даст неправильный результат "6", так как такое соединение "t left join p on t.tovar=p.tovar left join r on t.tovar=r.tovar" выдаст результирующий набор из 6 записей, которые дальше уже будут суммироваться. prihod засуммируется как 2+2+2+2+2+2=12, а rashod - как 1+1+1+1+1+1=6. Чтобы в этом убедится, можно отдельно вывести приход и расход: select t.tovar, sum(prihod) , sum(rashod) from t left join p on t.tovar=p.tovar left join r on t.tovar=r.tovar Этот эффект и называется перемножение записей (который наблюдается при джойне 3-х и более таблиц по типу многие-к-одному с двух сторон к стороне "один"). Извините, за некоторую сумбурность. Из меня рассказчик не очень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2001, 10:53 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
group by пропустил в спешке. звиняйте. смысел остался прежним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2001, 10:55 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
>2+2+2+2+2+2 Проверять сейчас некогда, но вот вопрос, а Null-ы куда делись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2001, 12:49 |
|
||
|
Запросик слабенький
|
|||
|---|---|---|---|
|
#18+
Для SergSuper Запрос с Union некорректен. В Union попадают (по опр.) только различные записи, т.е. если 2 прихода (+2) то на выходе только одна (+2). т.е. если +2+2-2-1 то получим в ответе -1 Всего хорошего ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2001, 05:38 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32011789&tid=1825881]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
21ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 292ms |

| 0 / 0 |
