|
|
|
| Ни как не могу сообразить, может подскажите, задача в слечующем, как выполнить запрос select n-ое количество раз, т.е. у меня есть запрос который по id ищет сумму
select sum(sp.quantity)
FROM supermag.smdocuments doc, supermag.smspec sp, supermag.saoperation op
WHERE doc.ID = sp.docid
AND doc.createdat BETWEEN to_date('29012007','DDMMYYYY') AND to_date('16052007','DDMMYYYY')
AND doc.opcode = op.ID
AND doc.docstate = 3
AND doc.locationto = 2
AND op.ID = 0
AND sp.ID = '51013515' --
есть второй запрос который находит список всех id по которым нужно найти сумму
SELECT smcard.ID
FROM smcard
WHERE idmeasurement = 1;
вот и вопрос как сделать в одном запросе чтобы
первый запрос посчитал сумму по всем ID из второго.
Буду очень благодарен за ответы. | |
|
|
|
|
|
|
|
для: MD5
(16.05.2007 в 17:32)
| | Что значит "запрос ищет сумму" ?
IDу из какой таблицы соответствует smcard.ID? doc? sp? op?
Приведите дамп структуры таблиц ... и фрагмент дампа данных тоже не помешает. | |
|
|
|
|
|
|
|
для: Trianon
(16.05.2007 в 20:30)
| | > Что значит "запрос ищет сумму" ?
Это значит, что select считает сумму по столбцу quantity по определенным критериям, напиример так как я написал по sp.article='51013515'
>IDу из какой таблицы соответствует smcard.ID?
smcard.ID=sp.article
вот и мне надо чтобы запрос считал сумму не по одному критерию smspec.article='51013515' а по множеству, которое получаеться в результате запроса SELECT smcard.ID FROM smcard; | |
|
|
|
|
|
|
|
для: MD5
(17.05.2007 в 09:20)
| | И считал не просто в один одну сумму а по каждому ID отдельная строка
sp.article1- сумма 1
sp.article2- сумма 2
.................................... | |
|
|
|
|
|
|
|
для: MD5
(17.05.2007 в 09:20)
| | Для начала перепишем Ваш запрос в человеческий формат:
SELECT sum(sp.quantity)
FROM supermag.smspec AS sp
JOIN supermag.smdocuments AS doc ON sp.docid = doc.ID
JOIN supermag.saoperation AS op ON doc.opcode = op.ID
WHERE doc.createdat BETWEEN to_date('29012007','DDMMYYYY') AND to_date('16052007','DDMMYYYY')
AND doc.docstate = 3
AND doc.locationto = 2
AND op.ID = 0
AND sp.ID = '51013515'
|
Потом соединим его с таблицей smcard, добавив перед суммированием группирование строк по smcard.ID
SELECT sc.ID, sum(sp.quantity) AS spsum
FROM
supermag.smcard AS sc
JOIN supermag.smspec AS sp ON sc.ID = sp.article
JOIN supermag.smdocuments AS doc ON sp.docid = doc.ID
JOIN supermag.saoperation AS op ON doc.opcode = op.ID
WHERE doc.createdat BETWEEN to_date('29012007','DDMMYYYY') AND to_date('16052007','DDMMYYYY')
AND doc.docstate = 3
AND doc.locationto = 2
AND op.ID = 0
AND sp.ID = '51013515'
GROUP BY sc.ID
|
| |
|
|
|
|
|
|
|
для: Trianon
(17.05.2007 в 09:44)
| | Только, по-моему, либо Вы наврали с названием поля группировки, либо строка AND sp.ID = '51013515' - лишняя, либо у Вас в таблице явно избыточные и противоречивые данные.... | |
|
|
|
|
|
|
|
для: Trianon
(17.05.2007 в 09:49)
| | строка AND sp.ID = '51013515'
конечно лишняя, это строка нужно когда выборка идет по одному ID | |
|
|
|