powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Остатки склада
14 сообщений из 14, страница 1 из 1
Остатки склада
    #32548011
Nauro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здрасте.
Table Tovar
Name: Tovar
Fields: ID_Tovar, Name, Price

Table Rashod
Name: Rashod
Fields: ID_Rashod, ID_Tovar, Count

Table Prihod
Name: Prihod
Fields: ID_Prihod, ID_Tovar, Count

мне надобно выбрать остатки товара, т.е. с таблицы Tovar взять Имя, а с таблиц расхода и прихода вычислить остаток (prihod.count - rashod.count)

как это сделать? я уже из кожи вон лезу. Вот что у меня получилось:
Код: plaintext
1.
2.
3.
select t.ID_Tovar, t.Name, sum(p.Count - r.Count)
from (Tovar t left join Prihod p on t.ID_Tovar = p.ID_Tovar)
       left join Rashod on t.ID_Tovar = r.ID_Tovar
group by t.ID_Tovar, t.Name

Херня получается полная. Прошу, помогите.
...
Рейтинг: 0 / 0
Остатки склада
    #32548064
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последний день перед отпуском плохо думается, но что если попробовать вместо sum(p.Count - r.Count) написать sum(p.Count) - sum(r.Count) as Ost
Может прокатит?

Кстати. Чтать форум "Проектирование БД" надо было до начала работы над БД. 8-) Что мешает слить Приход и Расход в одну таблицу? И что заставляет называть поля зарезервированным словом SQL Count?
...
Рейтинг: 0 / 0
Остатки склада
    #32548084
Nauro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемый Серега.
авторно что если попробовать вместо sum(p.Count - r.Count) написать sum(p.Count) - sum(r.Count) as Ost
это тож самое. Видать по арифметике у вас была тройка :) (шучу).
авторто мешает слить Приход и Расход в одну таблицу?
Ничего не мешает, но это есть не рационально, тк сказать не нормальная база. И тут важен сам принцип. Это ж стандартный способ взятия остатков.
автор И что заставляет называть поля зарезервированным словом SQL Count? Этот пример я набирал прямо в редакторе топика, потому ошибки возможни. Я просто привел пример моего мышления.
...
Рейтинг: 0 / 0
Остатки склада
    #32548125
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Nauro
это тож самое. Видать по арифметике у вас была тройка :) (шучу).
А что у тебя собственно не идет то? Сам запрос не отрабатывает (какая хоть БД то?) или остатки не сходятся?

Ничего не мешает, но это есть не рационально, тк сказать не нормальная база. И тут важен сам принцип. Это ж стандартный способ взятия остатков.
Это с двумя таблицами она ненормальная, да еще с такой структурой, если ты ее не "упростил" для форума и если это не курсач.
...
Рейтинг: 0 / 0
Остатки склада
    #32548170
Nauro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tovar:
ID_Tovar | Name | Price
1,first,10
2,second,20
3,third,30
Prihod
ID_Prihod | ID_Tovar | Kolichestvo
1,1,10
2,1,5
3,2,11
Rashod
ID_Rashod | ID_Tovar | Kolichestvo
1,1,5
2,1,2


Запрос:
select t.ID_Tovar, t.Name, sum(p.Kolichestvo - r.Kolichestvo)
from (Tovar t left join Prihod p on t.ID_Tovar = p.ID_Tovar)
left join Rashod r on t.ID_Tovar = r.ID_Tovar
group by t.ID_Tovar, t.Name

Результат запроса:
1,first,16
2,second,null
3,second,null
Желаемый результат:
1,first,7
2,second,0
3,third,0
...
Рейтинг: 0 / 0
Остатки склада
    #32548176
Nauro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поправочка:
Результат запроса:
1,first,16
2,second,null
3, third ,null
Желаемый результат:
1,first,7
2,second,0
3,third,0
...
Рейтинг: 0 / 0
Остатки склада
    #32548201
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а "мой" вариант запроса - не пробовал?

Prihod
ID_Prihod | ID_Tovar | Kolichestvo
1,1,10
2,1,5
3,2,11
Rashod
ID_Rashod | ID_Tovar | Kolichestvo
1,1,5
2,1,2
Желаемый результат:
1,first,7
2,second,0

У кого тут с математикой то было все ОК?
...
Рейтинг: 0 / 0
Остатки склада
    #32548213
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и по 1 дожно быть 8 (+10+5-5-2) а не 7. Желать надо возможного. 8-)
...
Рейтинг: 0 / 0
Остатки склада
    #32548273
Nauro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот по твоему:
Код: plaintext
1.
2.
3.
select t.ID_Tovar, t.Name, sum(p.Kilkist) - sum(r.Kilkist)
from (Tovar t left join Prihod p on t.ID_Tovar = p.ID_Tovar)
     left join Rashod r on t.ID_Tovar = r.ID_Tovar
group by t.ID_Tovar, t.Name

возвращает то же самое!
1, first, 16
2, second, null
3, third, null
...
Рейтинг: 0 / 0
Остатки склада
    #32548385
gringo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуй
select t.ID_Tovar, t.Name, sum(IsNull(p.Kolichestvo,0)) - sum(IsNull(r.Kolichestvo,0))
from Tovar t
left join Prihod p on t.ID_Tovar = p.ID_Tovar
left join Rashod r on t.ID_Tovar = r.ID_Tovar
group by t.ID_Tovar, t.Name
...
Рейтинг: 0 / 0
Остатки склада
    #32549483
Nauro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снимаю.
Дело было в СУБД. Все работает. Но я всеравно решил пойти по другому пути и написал трикера, кторые при изменении данных в расходе/приходи пересчитываю остатки. если кому интереснто могу поделится
...
Рейтинг: 0 / 0
Остатки склада
    #32549484
Nauro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сорри, я имел ввиду "тригера" :)
...
Рейтинг: 0 / 0
Остатки склада
    #32552647
Фотография Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создай View типа
Код: plaintext
1.
2.
3.
create view DocAll
select -[count] as [count] from rashod
union
select [count] from prihod
и работай как с одной таблицей
например для расчета остатков
Код: plaintext
select sum(count) from DocAll

А лучше всего ИМХО актуальные остатки хранить в отдельной таблице и пересчитывать в момент создания либо приходного, либо расходного документа.
...
Рейтинг: 0 / 0
Остатки склада
    #32556024
Klick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слить Приход и Расход в одну таблицу
Только так!
но это есть не рационально, тк сказать не нормальная база. Это ж стандартный способ взятия остатков
А где можно посмотреть этот стандарт???
Каких только извратов не придумают люди. Все сливаешь в одну таблицу. Они же абсолютно одинаковые по структуре и по смыслу.

А регистры по остаткам можно сажать на что угодно. Но дело то не в этом! Отатки у тебя только на текущий момент. А если нужны станут за какой-то месяц? Или еще как? На дату какую-то? Так что смысл хранить эти самые остатки тольков в том чтобы их быстренько выдавать бухгалтеру.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Остатки склада
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]