我正在做一些连接的以下输出:
------------------------------------------------
id title date
------------------------------------------------
1 title1 01/01/03
1 title3 01/01/05
2 title2 01/01/02
2 title3 01/01/01
2 title1 01/01/06
3 title1 01/01/07
3 title2 01/01/09
我想知道是否可以设置我的查询输出,以便每行都有一个不同的id。这可以通过允许将title属性设置为像这样的列来实现吗?
-----------------------------------------------------------
id title1 title2 title3
-----------------------------------------------------------
1 01/01/03 null 01/01/05
2 01/01/06 01/01/02 01/01/01
3 01/01/07 01/01/09 null
我不确定这只是疯狂的谈话,但是可以通过GROUP_BY设置一些东西?我可能在这里偏离轨道
答案 0 :(得分:1)
你只需要基本的条件聚合,假设有三个标题:
select id,
max(case when title = 'title1' then `date` end) as title1,
max(case when title = 'title2' then `date` end) as title2,
max(case when title = 'title3' then `date` end) as title3
from table t
group by id;
仅当您知道生成的SQL中所需的列列表时,此方法才有效。如果您有可变数量的潜在列,那么您有两个选择。第一种是使用group_concat()
来生成这样的东西:
id title1:date; title2:date . . .
这个的SQL是:
select id, group_concat(title, ':', date separator '; ')
from table t
group by id;
另一种是在字符串中创建必要的SQL,并使用prepare
和exec
来运行它。