2016-03-22 9 views
3

Итак, у меня есть SQL-запрос, который состоит из select, multiple subquerys, multiple join и some where conditions. Это выглядит как-то:Значения таблицы группы SQL

SELECT concat(t1.name, ' ', t1.surname) AS users, 
(SELECT t3.value AS col1 WHERE t6.id=343), 
(SELECT t3.value AS col2 WHERE t6.id=344), 
(SELECT t3.value AS col3 WHERE t6.id=345), 
(SELECT t3.value AS col4 WHERE t6.id=346), 
(SELECT t3.value AS col5 WHERE t6.id=347), 
(SELECT t3.value AS col6 WHERE t6.id=348), 
(SELECT t3.value AS col7 WHERE t6.id=349), 
(SELECT t3.value AS col8 WHERE t6.id=350), 
(SELECT t3.value AS col9 WHERE t6.id=351) 
FROM table1 t1 
JOIN table2 t2 
ON t2.id_table1_user=t1.id 
JOIN table3 t3 
ON t2.id=t3.id_eva 
JOIN table4 t4 
ON t3.id_pro_q=t4.id 
JOIN table5 t5 
ON t4.id_pro=t5.id 
JOIN table6 t6 
ON t4.id_t6=t6.id 
JOIN table7 t7 
ON t7.id_table1_user=t1.id 
WHERE t5.id=151 

Это дает мне эту таблицу:

table 1

Теперь ... мой вопрос - как я могу сгруппировать строки так, что есть только две строки и нет Значения NULL? Есть ли способ?

Просто для того, чтобы отметить - я являюсь новичком SQL, поэтому любые предложения по улучшению команды или чего-либо очень приветствуются.

ответ

1

Вам нужна группа по статье:

SELECT concat(t1.name, ' ', t1.surname) AS users, 
     max (CASE WHEN t6.id = 343 then t3.value end) as col1, 
     max (CASE WHEN t6.id = 344 then t3.value end) as col2, 
     max (CASE WHEN t6.id = 345 then t3.value end) as col3, 
     max (CASE WHEN t6.id = 346 then t3.value end) as col4, 
     max (CASE WHEN t6.id = 347 then t3.value end) as col5, 
     max (CASE WHEN t6.id = 348 then t3.value end) as col6, 
     max (CASE WHEN t6.id = 349 then t3.value end) as col7, 
     max (CASE WHEN t6.id = 350 then t3.value end) as col8, 
     max (CASE WHEN t6.id = 351 then t3.value end) as col9 
    FROM table1 t1 
    JOIN table2 t2 
    ON t2.id_table1_user = t1.id 
    JOIN table3 t3 
    ON t2.id = t3.id_eva 
    JOIN table4 t4 
    ON t3.id_pro_q = t4.id 
    JOIN table5 t5 
    ON t4.id_pro = t5.id 
    JOIN table6 t6 
    ON t4.id_t6 = t6.id 
    JOIN table7 t7 
    ON t7.id_table1_user = t1.id 
WHERE t5.id = 151 
GROUP BY concat(t1.name, ' ', t1.surname) 
+0

спасибо за ответ ... попробовал, что, к сожалению, и дает мне ошибку: ОШИБКА: подзапрос использует разгруппирована столбец «t3._value» из внешнего запроса – Pabos

+0

@Pabos и какая ошибка? В любом случае, попробуйте сейчас, отредактируйте ответ – sagi

+0

просто попытался с concat ... такая же ошибка (см. Мой последний пост) – Pabos

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