Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
Помогите, пожалуйста, написать запрос, чтобы получился результат таблицы 3:
таблица 1. клиент
номер клиента имя фамилия
1 иван иванов
2 сергей сергеев
3 петр петров
4 александр александров
таблица 2. оплата
номер оплаты номер клиента дата оплаты оплата
1 1 11 сентября 100
2 2 15 октября 50
3 4 1 февраля 30
4 3 13 мая 200
5 2 14 мая 200
6 3 15 мая 10
7 1 16 мая 120
8 4 17 мая 100
таблица 3. результат
имя фамилия сумма оплат
иван иванов 220
сергей сергеев 250
петр петров 210
александр александров 130
15 июл 13, 18:36    [14569757]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Ляля-Я, а вы то сами пытались ее решить? Никаких идей?
15 июл 13, 18:38    [14569765]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
Minamoto, да я не умею( Пытаюсь научиться, пока не получается. Если не затруднит, помогите пожалуйста.
15 июл 13, 18:47    [14569799]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Ляля-Я,да без проблем. Читайте: http://www.sql-tutorial.ru/
15 июл 13, 18:50    [14569807]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
как-то так
select t1.name,t1.surname,isnull(payy.pay,0.00)
from tablica1 as t1
left join
(
  select client_id,sum(payment)pay
  from table 2
  group by client_id
)as payy on t1.client_id=payy.client_id
15 июл 13, 18:50    [14569814]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
londinium
как-то так
select t1.name,t1.surname,isnull(payy.pay,0.00)
from tablica1 as t1
left join
(
  select client_id,sum(payment)pay
  from table 2
  group by client_id
)as payy on t1.client_id=payy.client_id
Ужас какой.
15 июл 13, 18:52    [14569821]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
Minamoto, спасибо. Читаю.
15 июл 13, 18:52    [14569825]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
автор
Ужас какой.

Ваш выход
15 июл 13, 18:56    [14569834]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
londinium, и Вам спасибо. У меня ещё больший ужас получается.
15 июл 13, 19:02    [14569851]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
_Berd_
Member [заблокирован]

Откуда:
Сообщений: 199
Ляля-Я
Помогите, пожалуйста, написать запрос, чтобы получился результат таблицы 3:
таблица 1. клиент
номер клиента имя фамилия
1 иван иванов
2 сергей сергеев
3 петр петров
4 александр александров
таблица 2. оплата
номер оплаты номер клиента дата оплаты оплата
1 1 11 сентября 100
2 2 15 октября 50
3 4 1 февраля 30
4 3 13 мая 200
5 2 14 мая 200
6 3 15 мая 10
7 1 16 мая 120
8 4 17 мая 100
таблица 3. результат
имя фамилия сумма оплат
иван иванов 220
сергей сергеев 250
петр петров 210
александр александров 130


SELECT T1.имя, T1.фамилия, Оплата = SUM(T2.оплата)
FROM Таблица1 T1 WITH(NOLOCK)
JOIN Таблица2 T2 WITH(NOLOCK) ON 
T1.номер_клиента = T2.номер_клиента
GROUP BY T1.имя, T1.фамилия


WITH(NOLOCK) в запрос добавил для того, чтобы Вы прочитали, что это такое.

Попробуйте понять, как работает GROUP BY/
Например, запустите такое:

SELECT номер_клиента, Оплата = SUM(оплата)
FROM Таблица2
15 июл 13, 19:05    [14569863]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
_Berd_, спасибо. WITH(NOLOCK) - это для меня точно что-то новое...
15 июл 13, 19:08    [14569875]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
_Berd_,
я конечно, прочитала и суть, вроде, уловила. Но думаю, что для меня (нубика) - это как-то сложнова-то...
15 июл 13, 19:18    [14569898]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
А так можно?:
SELECT Name,Surname, Sum
FROM Sheet 1 as t1 JOIN Sheet 2 as t2 on t1.customer_id=t2.customer_id
GROUP BY Name, Surname
15 июл 13, 19:35    [14569955]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
xenix
Guest
автор
Sum

а Sum что?
15 июл 13, 19:42    [14569975]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
xenix, так надо?:
SELECT Name,Surname, payment = Sum (t2.payment)
FROM Sheet 1 as t1 JOIN Sheet 2 as t2 on t1.customer_id=t2.customer_id
GROUP BY Name, Surname
15 июл 13, 19:46    [14569985]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
londinium
автор
Ужас какой.

Ваш выход
зачем вам вложенный запрос? чем простой left join второй таблицы и group by не устраивает?
16 июл 13, 10:18    [14571371]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Ляля-Я
xenix, так надо?:
SELECT Name,Surname, payment = Sum (t2.payment)
FROM Sheet 1 as t1 JOIN Sheet 2 as t2 on t1.customer_id=t2.customer_id
GROUP BY Name, Surname
Вроде все верно, уточню только, что если нужно получить все записи из 1-й таблицы (включая те, которых во второй нету), то нужно использовать не JOIN (он, на самом деле, INNER JOIN), а LEFT OUTER JOIN, и добавить функцию к агрегации: ISNULL(SUM(t2.payment), 0).
16 июл 13, 10:20    [14571400]     Ответить | Цитировать Сообщить модератору
 Re: Задачка по SQL. Помогите пожалуйста.  [new]
Ляля-Я
Member

Откуда:
Сообщений: 9
Minamoto,
большое спасибо. Почитала и об этих командах. Очень интересно.
16 июл 13, 13:40    [14572951]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить