Форум: "Базы";
Текущий архив: 2003.03.24;
Скачать: [xml.tar.bz2];
Внизsql запрос Найти похожие ветки
← →
denis24 (2003-02-27 14:22) [0]Есть две бд.В одной названия материалов(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
то получается множество записей ,где сумма по каждому типу движения образует новую строку.
← →
OneOfTheFew (2003-02-27 17:18) [1]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
← →
Johnmen (2003-02-27 18:05) [2]DISTINCT излишен...
← →
MsGuns (2003-02-27 23:29) [3]>OneOfTheFew (27.02.03 17:18)
Мудрено. Проще через UNION
← →
ЮЮ (2003-02-28 03:36) [4]Не столько проше, сколько правильнее, т.к. при LEFT JOIN получим лишние записи
← →
OneOfTheFew (2003-02-28 11:24) [5]2 Johmen
По Distinct cогласен, просто скопировал подобный запрос из своих работ, но неошибочно.
2MsGuns & ЮЮ
А вот Вы, Дядьки, похоже неправы: внимательно прочитайте Вопрос и если сможете при помощи UNION сформировать структуру как у меня (и как просит Denis24), тогда я перед Вами Преклоню Колени и буду брать у Вас платные уроки :)
← →
OneOfTheFew (2003-02-28 11:40) [6]Кстати, Ув. ЮЮ
Что значит "лишние записи"? Я осуществляю нормальный контроль "висячих строк" - постановка вопроса не оговаривает "Показать только те материалы, по которым было какое-либо движение"
← →
denis24 (2003-02-28 14:46) [7]Все работает,только суммы двойные получаются
← →
OneOfTheFew (2003-02-28 15:07) [8]Че значит двойные ???
← →
Johnmen (2003-02-28 15:20) [9]Все правильно удваивается. Т.к. см. ЮЮ © (28.02.03 03:36)
← →
denis24 (2003-02-28 15:32) [10]А подробней ,а то я на таком уровне sql плаваю
И еще можно ли использовать функцию iif() при вычислении поля
Что -то типа
select iif("field1=1,"H"."G") as new_field from ..........
← →
OneOfTheFew (2003-02-28 16:20) [11]2 MsGuns , ЮЮ & Johnmen
ПОЗОР НА МОЮ СЕДУЮ ГОЛОВУ!!!
Мужики, почем у Вас платные уроки??? И как к Вам доехать???
P.S. Лучше пока помолчу, послушаю хороших ребят... :(
← →
denis24 (2003-02-28 16:36) [12]Двойные значит что если в действительности по приходу было 10+20
то считает в колонке приход 60
10+20+10+20
← →
OneOfTheFew (2003-02-28 17:24) [13]2 denis24
Cлушай, извини ради Бога!!!
Если Ты хочешь получить такую таблицу в один "заход", то я предложил Тебе абсолютно неверное решение. Существует вариант решения в несколько этапов (достаточно быстро исполняемый даже на больших объемах данных), если Тебя конечно это устроит. И, если не ошибаюсь, можно еще при помощи Decision Cube (но с ним я никогда не работал).
← →
denis24 (2003-02-28 18:25) [14]Ладно все нормально!Я уже с помощью временной таблицы сделал
← →
OneOfTheFew (2003-02-28 18:38) [15]2 denis24
Ok!
← →
ЮЮ (2003-03-01 03:29) [16]>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)
>Ладно все нормально!Я уже с помощью временной таблицы сделал
Избавиться от этого можно было проще, используя для расхода отрицательные значения
← →
denis24 (2003-03-04 10:06) [17]А если в поле sost_mov может быть не только "рх" и "пр" а еще штук пять типов ?
← →
ЮЮ (2003-03-05 03:32) [18]а разносить их хочещь по по ещё 5 столбцам? Тогда ещё 5 Union-в
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.03.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c