|
|
|
Как правильно составить запрос?
|
|||
|---|---|---|---|
|
#18+
Господа, я допускаю, что не оригинален, но мне нужна помощь в составлении запроса. Есть база данных для склада. В разных таблицах хранятся данные по получателям, материалам, объектам и т.п. И есть таблица, фиксирующая факт выдачи со ссылками на все эти таблицы. Проблема в том, что там каждый факт выдачи фиксируется отдельной строкой. Значит если монтажник берет на объект 3 раза один и тот же материал, то будет три разных записи о выдаче. структура таблицы выдачи такая: IDS|MontID|ObjID|MatID|Number|Rashod IDS - индекс записи ***ID - ссылка на другую таблицу, типа кто куда и чего взял Number - сколько материалов выдано Rashod - поле типа enum, признак типа выдано со склада/вернулось обратно Вопрос такой: мне надо сделать выборку сколько материалов ушло на конретный объект. Т.е. выбрать все что выданы, минусовать все что вернулись обратно, при этом если какая-то позиция материала повторяется, то их надо суммировать по количеству и отображать одной строкой. Может я конечно несколько путано излагаю суть вопроса... Мне интересно, можно ли это сделать в принципе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2005, 11:55 |
|
||
|
Как правильно составить запрос?
|
|||
|---|---|---|---|
|
#18+
Структуру не очень понял, вот отвлеченный пример: материал - поле однозначно определяющее тип материала, количество - так и есть, расход - "0" выдано, "1" - возвращено, конструкция (количество-2*расход*количество) равна положительному числу количетсва при расход=0 и отрицательному при расход =1. Итак. select материал, sum(количество-2*расход*количество) from выдачи group by материал "Прежде чем убить человека, узнай, нет ли у него влиятельных родственников" (с) Библия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2005, 12:04 |
|
||
|
Как правильно составить запрос?
|
|||
|---|---|---|---|
|
#18+
Согласен с решением, не согласен со структурой данных. Для таких случаев, как выдача-получение, существует старая добрая двойная запись (дебет/кредит) Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2005, 10:01 |
|
||
|
Как правильно составить запрос?
|
|||
|---|---|---|---|
|
#18+
Громадное спасибо, действительно очень просто, 2 дня бился головой о стенку. Конкретно в моем случае пришлось сделать чуть сложнее SUM(if(Vidacha.Rashod='rashod',Vidacha.Number,-1*Vidacha.Number)), т.е. ваш вариант но в более общей и менее изящной форме. И если можно вопрос к Marat_L, я человек в этой области довольно новый, не могли бы вы объеснить вашу мысль насчет струтуры базы данных для моего случая? Может есть какие-то популярные ресурсы где это рассказывается? Азы языка и управления базами данных я выучил, но где можно научится составлять правильные структуры баз данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2005, 16:38 |
|
||
|
Как правильно составить запрос?
|
|||
|---|---|---|---|
|
#18+
Что касается книжек и ссылок - лучше сходи-почитай на форум "Проектирование баз данных" Для начала должно хватить. Что касается моей мысли - то всё очень просто Структура таблицы(примерная) дата, объект(что выдали), дебет (кому выдали),кредит(кто выдал), количество В такой постановке объект выдающий и получающий равноправны, и сделав запрос по учету у одного объекта ты увидишь что запрос будет работать и для другого. Хотя это не догма Жизнь коротка - потерпи немного :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2005, 08:37 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1854451]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 434ms |

| 0 / 0 |
