Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> объединение данных из неск.таблиц 
:(
    Опции темы
motorway
Дата 10.9.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Есть таблица с id людей и их именами, с id людей и зарплатами, с id людей и премиями, с id людей и штрафами.
Как написать запрос, выводящий для всех людей суммарные деньги=зарплата+все премии-все штрафы?
MS SQL
PM MAIL   Вверх
Akina
Дата 10.9.2008, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Руками, блин!

Код

select p.name, (isnull(s.sum,0)+isnull(b.sum,0)-isnull(f.sum,0)) as sum
from people as p
left join salary as s
  on p.id=s.id
left join bonus as b
  on p.id=b.id
left join fine as f
  on p.id=b.id
group by p.id



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 10.9.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Понимаю, что не ногами. После изменения названий на мои, получаю ошибку:
Column 'employees.name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
И, кстати, в последнем join, там не p.id=f.id должно быть?

Это сообщение отредактировал(а) motorway - 10.9.2008, 16:31
PM MAIL   Вверх
Akina
Дата 10.9.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(motorway @  10.9.2008,  17:30 Найти цитируемый пост)
После изменения названий на мои, получаю ошибку:

Ну так дай СВОИ названия. А лучше структуру таблиц с указанием ключей и связей.

Цитата(motorway @  10.9.2008,  17:30 Найти цитируемый пост)
И, кстати, в последнем join, там не p.id=f.id должно быть?

Конечно. Издержки копипаста.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
motorway
Дата 10.9.2008, 22:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Названия я просто изменил, суть не в этом. Если как в твоих названиях, то ошибка была бы "p.name ..." (у меня employees). Правильно ли я понимаю, что условие выбора - одинаковые id во всех таблицах, т.е. относятся к одному человеку? Можно ли это сделать как 
where
Код

Employees.id=bonus.id and Employees.id=fine.id and Employees.id=salary.id
?

Еще проблема у меня в том, что если хотя бы одного поля у человека нет, напр., нет штрафов, то он не выводится в рез-те. Но isnull у меня не помогает.
---
вот сделал код путем проб, здесь названия таблиц другие, но это не важно, суть понятна
Код

select p.name, (isnull(s.summ,0)+isnull(sum(reward),0)-isnull(sum(punish),0)) as sum
from employees as p
left join summ as s
  on p.id=s.id
left join rewards as b
  on p.id=b.id
left join puns as f
  on p.id=f.id
group by p.name,s.summ

Но не совсем его понял до конца

Это сообщение отредактировал(а) motorway - 10.9.2008, 22:38
PM MAIL   Вверх
Akina
Дата 11.9.2008, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(motorway @  10.9.2008,  23:09 Найти цитируемый пост)
если хотя бы одного поля у человека нет, напр., нет штрафов, то он не выводится в рез-те.

Прочтите внимательно ман по тому, чем отличаются Full, Left/Right и Inner связывания. До полного понимания.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0975 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.