![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL-запрос [D5, MSSQL]
icu © (2002-05-28 17:01:00)Hiya,
есть два простых запроса.
select
sum(value)
from
income
group by person_id
...
select
sum(value)
from
outcome
group by person_id
их можно объединить так, что бы результат в одной таблице был виден?
yozhik (2002-05-28 20:06:00) [1]не надо там distinct, иначе не все personalid могут выбраться
Delirium (2002-05-28 19:30:00) [2]> yozhik
Ты забыл distinct в представлении
yozhik (2002-05-28 19:20:00) [3]CREATE VIEW SameName
AS
SELECT personid
FROM income
UNION ALL
SELECT personid
FROM outcome
----
select SameName.personid, Sum(income.income), Sum(outcome.outcome)
from SameName LEFT OUTER JOIN income on samename.presonid=income.personid LEFT OUTER JOIN outcome on samename.presonid=outcome.personid
group by samename.personid
вроде правильно написал, но смысл такой: 1 запрос на объединение, 2-связь 1-го запроса с тбл.
Delirium (2002-05-28 19:09:00) [4]> All
В принципе для такого рода объединений нужен full join, но так-как у нат тут агрегация то, понадобятся вложенные запросы, а union - это просто и быстро.
Delirium (2002-05-28 19:02:00) [5]> asafr
"Ну, а использовать LEFT OUTER JOIN не пробовал?" - в MSSQL left join и left outer join - это одно и то-же см.Books Online
> icu
А чего не устраивает ?
icu (2002-05-28 18:33:00) [6]Нет, не выходит каменный цветок. =(
asafr (2002-05-28 18:14:00) [7]Ну, а использовать LEFT OUTER JOIN не пробовал?
Delirium (2002-05-28 18:00:00) [8]Ну усложните малость, я-же для примера написал - постенько
select distinct income.person_id,
sum(income.value) as inValue,
sum(outcome.value) as outValue
from income
left join outcome on income.person_id=outcome.person_id
group by income.person_id
union all
select
outcome.person_id,
sum(income.value) as inValue,
sum(outcome.value) as outValue
from outcome
left join income on outcome.person_id=income.person_id
group by outcome.person_id
Johnmen (2002-05-28 17:41:00) [9]1. поппробуй внешнее соединение
2. в WHERE добавь соотв-ие условие
icu (2002-05-28 17:35:00) [10]Вот и я про что. Неужели хранимую писать надо?
Johnmen (2002-05-28 17:33:00) [11]>Delirium © (28.05.02 17:20)
>asafr © (28.05.02 17:24)
монопенисно... ;-)))))))))))))))))))))))))))))))))))
Только работать не будет корректно, если для income.person_id нет соответств. outcome.person_id и наоборот.... :)
icu (2002-05-28 17:31:00) [12]Нормально,
а если число записей в таблицах разное?
asafr (2002-05-28 17:24:00) [13]SELECT a.person_id, sum(a.value), sum(b.value)
FROM income a, outcome b
WHERE a.person_id=b.person_id
GROUP BY a.person_id
Delirium (2002-05-28 17:20:00) [14]
select income.person_id,
sum(income.value) as inValue,
sum(outcome.value) as outValue
from income
join outcome on income.person_id=outcome.person_id
group by income.person_id
icu (2002-05-28 17:19:00) [15]Hiya,
грубо говоря. У меня есть таблица расход и таблица приход. В них есть поля "сумма", "человек". Надо состряпать один общий свод. Как делать объединения?
Может пример есть?
Johnmen (2002-05-28 17:16:00) [16]Повторяю :
- либо делать соединение (если возможно......)
(если income и outcome один-к-одному по person_id )
icu (2002-05-28 17:12:00) [17]Hiya,
неее. Я хочу видеть вот что:
person_id, взял, вернул.
1 10 5
2 100 300
...
и т.д.
То есть свод по задолженности как бы.
zx (2002-05-28 17:11:00) [18]Не забудь ALL <- очень вредная штука:(((
Johnmen (2002-05-28 17:06:00) [19]- либо делать соединение (если возможно......)
- либо UNION