LINUX.ORG.RU

[sql] вопрос

 


0

1

Здравствуйте!
Есть таблица, в ней поля id, name, A и B.
Можно ли сделать как-нибудь следующее:
Для каждого name берем все записи в которых поле B имеет значения N1,N2..Nm, суммируем значения по полю A, добавляем сумму к полю с B=M, и удаляем все поля с B=N1..Nm?
Пример:
id name A B
1 test 2 1
2 test 3 1
3 test 7 1
4 test 5 2
5 test2 6 1
6 test2 8 2

N1=1, M=2.
В результате должно получится:

id name A B
4 test 17 2
6 test2 14 2
?

Заранее спасибо!

★★★★★

Уточнение: Для каждого name берем все записи в которых поле B имеет значения N1 или N2 или ... или Nm,

kovrik ★★★★★
() автор топика

Ты делаешь что-то странное. РСУБД для таких процедурных задач не очень предназначены.

dizza ★★★★★
()
Ответ на: комментарий от alix

То есть выбрать во временную where B in ... а потом из временной выбрать where B not in ...

alix ★★★★
()

На MySQL примерно так (насколько я понял задачу):

SELECT
t1.id,t1.name,SUM(t2.A) AS A, t1.B
FROM
table AS t1
LEFT JOIN table AS t2 USING name
WHERE
t1.B=M
AND t2.B>=N1
GROUP BY t1.id

И да, а зачем Вам оно?

Sorg
()
Ответ на: комментарий от schizoid

А если нужно не для каждого name, а для каждой пары(тройки, и тд) : name-surname (например).
Т.е. два разных поля, но при этом name может совпадать в разных записях, но surname различаться?

kovrik ★★★★★
() автор топика
Ответ на: комментарий от kovrik

А вот это уже нет, действительно.

Тут, мне кажется, одним SQL не обойтись. Либо процедуру хранимую писать в базе, либо в коде вызывающем логику.

schizoid ★★★
()
Ответ на: комментарий от schizoid

Печально...Спасибо за помощь!

kovrik ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.