![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
sql запрос [D5, Paradox]
denis24 © (2003-02-27 14:22:00)Есть две бд.В одной названия материалов(mater) ,во второй движения по ним(mov_mat)
mater имеет стр-ру (n_mat,n 2;nazv_mat c 40)
mov_mat (dat_m;n_mat,n 2;kol_mat,n 2;sost_mov-тип движения (приход расход),c 2)
Можно ли сделать такой запрос что бы результатом была такая таблица
Название материала,сумма по приходу,сумма по расходу.
Если делать просто select nazv_mat,sost_mov,sum(kol_mat) as P,sum(kol_mat) as R from mater,mov_mat group by sost_mov
то получается множество записей ,где сумма по каждому типу движения образует новую строку.
ЮЮ (2003-03-05 03:32:00) [1]а разносить их хочещь по по ещё 5 столбцам? Тогда ещё 5 Union-в
denis24 (2003-03-04 10:06:00) [2]А если в поле sost_mov может быть не только "рх" и "пр" а еще штук пять типов ?
ЮЮ (2003-03-01 03:29:00) [3]>OneOfTheFew (28.02.03 11:24)
>и если сможете при помощи UNION сформировать структуру как у меня
Это рещение практически еженедельно появляется на страницах этого форума :-)
SELECT
N_mat,Nazv_mat,sum(Prihod) as Prihod,sum(Rashod) as Rashod
FROM
(
SELECT N_mat, Nazv_mat, Kol_mat Pihod, CAST(0 AS INTEGER)Rashod
FROM
Mov_mat
LEFT JOIN Mater ON Move_mat.N_mat =Mater.N_mat
WHERE Sost_mov="пр"
UNION
SELECT N_mat, Nazv_mat,0, Kol_mat
FROM
Mov_mat
LEFT JOIN Mater ON Move_mat.N_mat =Mater.N_mat
WHERE Sost_mov="рх"
) PrRx
GROUP BY N_mat,Nazv_mat
ORDER BY Nazv_mat
В PARADOX-е, в силу невозможности подзапросов в Local SQL, получаем:
SELECT N_mat,Nazv_mat,sum(Prihod) as Prihod,sum(Rashod) as Rashod
FROM PrRx.sql
GROUP BY N_mat,Nazv_mat
ORDER BY Nazv_mat
где текстовый файл "PrRx.sql", лежащий в каталоге с БД содержит:
SELECT N_mat, Nazv_mat, Kol_mat Pihod, CAST(0 AS INTEGER)Rashod
FROM Mov_mat LEFT JOIN Mater ON Move_mat.N_mat =Mater.N_mat
WHERE Sost_mov="пр"
UNION
SELECT N_mat, Nazv_mat,0, Kol_mat
FROM Mov_mat LEFT JOIN Mater ON Move_mat.N_mat =Mater.N_mat
WHERE Sost_mov="рх"
>denis24 (28.02.03 18:25)
>Ладно все нормально!Я уже с помощью временной таблицы сделал
Избавиться от этого можно было проще, используя для расхода отрицательные значения
OneOfTheFew (2003-02-28 18:38:00) [4]2 denis24
Ok!
denis24 (2003-02-28 18:25:00) [5]Ладно все нормально!Я уже с помощью временной таблицы сделал
OneOfTheFew (2003-02-28 17:24:00) [6]2 denis24
Cлушай, извини ради Бога!!!
Если Ты хочешь получить такую таблицу в один "заход", то я предложил Тебе абсолютно неверное решение. Существует вариант решения в несколько этапов (достаточно быстро исполняемый даже на больших объемах данных), если Тебя конечно это устроит. И, если не ошибаюсь, можно еще при помощи Decision Cube (но с ним я никогда не работал).
denis24 (2003-02-28 16:36:00) [7]Двойные значит что если в действительности по приходу было 10+20
то считает в колонке приход 60
10+20+10+20
OneOfTheFew (2003-02-28 16:20:00) [8]2 MsGuns , ЮЮ & Johnmen
ПОЗОР НА МОЮ СЕДУЮ ГОЛОВУ!!!
Мужики, почем у Вас платные уроки??? И как к Вам доехать???
P.S. Лучше пока помолчу, послушаю хороших ребят... :(
denis24 (2003-02-28 15:32:00) [9]А подробней ,а то я на таком уровне sql плаваю
И еще можно ли использовать функцию iif() при вычислении поля
Что -то типа
select iif("field1=1,"H"."G") as new_field from ..........
Johnmen (2003-02-28 15:20:00) [10]Все правильно удваивается. Т.к. см. ЮЮ © (28.02.03 03:36)
OneOfTheFew (2003-02-28 15:07:00) [11]Че значит двойные ???
denis24 (2003-02-28 14:46:00) [12]Все работает,только суммы двойные получаются
OneOfTheFew (2003-02-28 11:40:00) [13]Кстати, Ув. ЮЮ
Что значит "лишние записи"? Я осуществляю нормальный контроль "висячих строк" - постановка вопроса не оговаривает "Показать только те материалы, по которым было какое-либо движение"
OneOfTheFew (2003-02-28 11:24:00) [14]2 Johmen
По Distinct cогласен, просто скопировал подобный запрос из своих работ, но неошибочно.
2MsGuns & ЮЮ
А вот Вы, Дядьки, похоже неправы: внимательно прочитайте Вопрос и если сможете при помощи UNION сформировать структуру как у меня (и как просит Denis24), тогда я перед Вами Преклоню Колени и буду брать у Вас платные уроки :)
ЮЮ (2003-02-28 03:36:00) [15]Не столько проше, сколько правильнее, т.к. при LEFT JOIN получим лишние записи
MsGuns (2003-02-27 23:29:00) [16]>OneOfTheFew (27.02.03 17:18)
Мудрено. Проще через UNION
Johnmen (2003-02-27 18:05:00) [17]DISTINCT излишен...
OneOfTheFew (2003-02-27 17:18:00) [18]2 denis24
Могет тебе такое нужно ???
SELECT
DISTINCT
M.N_mat,
M.Nazv_mat,
sum(M1.Kol_mat) as Prihod,
sum(M2.Kol_mat) as Rashod
FROM
Mater M
LEFT OUTER JOIN Mov_mat as M1
ON ((M.N_mat=M1.N_mat) AND (M1.Sost_mov="пр"))
LEFT OUTER JOIN Mov_mat as M2
ON ((M.N_mat=M2.N_mat) AND (M2.Sost_mov="рх"))
GROUP BY
M.N_mat,
M.Nazv_mat