Вопрос по запросу SQL

123
H
На сайте с 21.08.2004
Offline
122
#11

То, что вы хотите сделать называется Pivot table - развернуть строки в столбцы.

Гуглите pivot mysql

Есть что-то, что мы не знаем, но узнать это мы не можем.
D
На сайте с 28.06.2008
Offline
1101
#12

hrach, похоже то что нужно, спс!

H
На сайте с 21.08.2004
Offline
122
#13

select MAX(id), MAX(f1),MAX(f2),max(f3),MAX(f4) from (


select id,case when type_id=1 then text1 end as f1,
case when type_id=2 then text1 end as f2, case when type_id=6 then text1 end as f3,
case when type_id=7 then text1 end as f4
from table_1

group by id,type_id,text1) dt

пробуйте (под рукой mysql нет, пример для ms sql)

D
На сайте с 28.06.2008
Offline
1101
#14

hrach, не вижу в вашем примере вторую таблицу

H
На сайте с 21.08.2004
Offline
122
#15

а какая разница сколько там таблиц?:))



select MAX(id), MAX(f1),MAX(f2),max(f3),MAX(f4) from (

SELECT t1.id,
case when t2.type_id=1 then t2.text end as f1,
case when t2.type_id=2 then t2.text end as f2,
case when t2.type_id=6 then t2.text end as f3,
case when t2.type_id=7 then t2.text end as f4

FROM firm_items as t1
INNER JOIN firm_items_fields_value as t2 on t1.id = t2.item_id

WHERE t1.category_id = 45


group by t1.id,t2.type_id,t2.text
) dt

D
На сайте с 28.06.2008
Offline
1101
#16

hrach, Спасибо, оч интересная конструкция, буду изучать!

H
На сайте с 21.08.2004
Offline
122
#17
Dram:
hrach, Спасибо, оч интересная конструкция, буду изучать!

вложенная таблица вернет все те же 4 строки, только в некоторых столбцах будет NULL.

Для этого выбираем из полученного агрегатом max.

D
На сайте с 28.06.2008
Offline
1101
#18

А так чтобы без макс? Мне ведь все нужны, чтобы циклом по ним пройтись. Чтобы с группировкой по id и без нулл

S
На сайте с 19.11.2014
Offline
72
#19
hrach:
вложенная таблица вернет все те же 4 строки, только в некоторых столбцах будет NULL.
Для этого выбираем из полученного агрегатом max.

Так сделать группировку только t1.id и не нужен вложенный запрос будет возвращать по одной строке на один id. Я так понимаю, у него же на один id по одному оответствующему тел, сайту, имени

---------- Добавлено 12.11.2019 в 22:40 ----------

Dram:
А так чтобы без макс? Мне ведь все нужны, чтобы циклом по ним пройтись. Чтобы с группировкой по id и без нулл

Мне, кажется, вот так достаточно


SELECT t1.id AS id,
CASE WHEN t2.type_id=7 THEN t2.text END AS tel,
CASE WHEN t2.type_id=2 THEN t2.text END AS dir,
CASE WHEN t2.type_id=6 THEN t2.text END AS site,
CASE WHEN t2.type_id=1 THEN t2.text END AS email
FROM firm_items as t1
INNER JOIN firm_items_fields_value as t2 on t1.id = t2.item_id
WHERE t1.category_id = 45
GROUP BY t1.id
N
На сайте с 29.09.2018
Offline
9
#20

Попробуй так:


SELECT t1.id,
MAX(IF(t2.type_id=7,t2.text,0)) AS tel,
MAX(IF(t2.type_id=2,t2.text,0)) AS dir
FROM firm_items as t1
INNER JOIN firm_items_fields_value as t2 on t1.id = t2.item_id
WHERE t1.category_id = 45
GROUP BY t1.id
123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий