Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.24;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
14-76586
Hunne
2003-03-05 21:22
2003.03.24
Какую купить книгу?


8-76529
_ncux_
2002-12-14 13:36
2003.03.24
Проверить звук на соответствие какой-нибудь ноте


3-76306
Silver_
2003-03-04 10:09
2003.03.24
---|Ветка была без названия|---


6-76561
Serbor
2002-12-04 18:30
2003.03.24
TidMessage


3-76368
AlexA
2003-03-06 16:04
2003.03.24
Раскрытие DBLookupCobboBox