Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-76606
MBo
2003-03-07 09:37
2003.03.24
Дорогие девушки! С праздником вас!


3-76327
Злодей
2003-03-05 18:38
2003.03.24
Данные из поля в таблице


7-76700
BJValentine
2003-01-31 19:40
2003.03.24
Время


3-76269
Ahmad K
2003-03-06 01:26
2003.03.24
Суммирование данных столбца в BDE


14-76659
multik
2003-03-08 18:02
2003.03.24
Привет всем!!! Нужен компонент, который знает ссылки.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский