2013-12-19 3 views
0

У меня есть следующая структура таблицы:Добавить столбцы из двух строк, основываясь на состоянии в MySQL

 
+------+-------+-------+--------+ 
| mid | a  | b  | points | 
+------+-------+-------+--------+ 
| 69 | 3137 | 13316 | 210 | 
| 70 | 13316 | 3137 | 350 | 
| 71 | 3497 | 13316 | 200 | 
| 72 | 13316 | 3497 |  25 | 
| 73 | 3605 | 13316 | 205 | 
| 74 | 13316 | 3605 | 290 | 
+------+-------+-------+--------+ 

Я хочу, чтобы добавить «точку» значение двух строк, когда «» строка 1 = «Ъ "из строки 2 и„а“строка 2 =„б“строки 1.

выход должен быть чем-то вроде этого:

 
+------+-------+-------+--------+ 
| mid | a  | b  | points | 
+------+-------+-------+--------+ 
| 69 | 3137 | 13316 | 560 | 
| 71 | 3497 | 13316 | 225 | 
| 73 | 3605 | 13316 | 495 | 
+------+-------+-------+--------+ 

ответ

0

Вы можете попробовать это так

SELECT t1.mid, t1.a, t1.b, t1.points + t2.points points 
    FROM table1 t1 JOIN table1 t2 
    ON t1.a = t2.b 
    AND t1.b = t2.a 
    AND t1.mid < t2.mid 

или используя MySQL Нестандартные GROUP BY добавочному

SELECT mid, a, b, SUM(points) points 
    FROM 
(
    SELECT mid, a, b, points 
    FROM table1 
    ORDER BY mid 
) q 
GROUP BY LEAST(a, b), GREATEST(a, b) 

Выход:

 
| MID | A |  B | POINTS | 
|-----|------|-------|--------| 
| 69 | 3137 | 13316 | 560 | 
| 71 | 3497 | 13316 | 225 | 
| 73 | 3605 | 13316 | 495 | 

Вот SQLFiddle демо

+0

Спасибо большое peterm :) Это именно то, что я искал. Вы сэкономили много времени и оценили быстрый ответ. – user3118436

+0

@ user3118436 Вы более чем приветствуетесь. Удачи :) – peterm

+0

Еще один вопрос, можете посмотреть на эту ссылку, http://sqlfiddle.com/#!2/aa462/1. Я немного изменил схему. Я хочу убедиться, что 13316 всегда находится в столбце «b». Вы можете мне помочь здесь. – user3118436

0

Если я правильно понял, то вы хотите:

SELECT p1.mid, p1.a, p1.b, p1.points + p2.points points 
FROM points p1 
INNER JOIN points p2 ON p1.a = p2.b AND p1.b = p2.a 
WHERE p1.mid < p2.mid 

Я выбил его в sql fiddle и выдал требуемый результат.

+0

Получил решение Кевин. Спасибо за ваш ответ. – user3118436

Смежные вопросы