复杂的SQL Pivot

时间:2012-07-07 11:29:46

标签: mysql sql pivot-table

所以我有一个查询从4个表中选择数据:

  • 分类法(包含有关分类法的标题和数据)
  • taxonomy_values(分类法的可能值)
  • post_taxonomy_values(保存案例表中的ID,以及分类表中的ID以链接两者)

我正在尝试从案例表中选择一行,然后获取所有分类名称及其值。这是我到目前为止所得到的:

select 
cases.title, cases.content, cases.status, taxonomies.title as 'taxonomy', taxonomy_values.value as 'taxonomy_value'

from cases, post_taxonomy_values, taxonomies, taxonomy_values 

where 
cases.slug = 'b-v-dpp' and
post_taxonomy_values.post = cases.id and
taxonomies.id = post_taxonomy_values.taxonomy and
taxonomy_values.id = post_taxonomy_values.value

但这就是产生的: Current query result

所以基本上我想要的是获取分类法名称并使它们成为列名,并将它们的值设置为返回行的一部分。

这是表格的结构:

例:

cases table

分类

taxonomies table

taxonomy_values ('taxonomy'引用分类表中的ID):

taxonomy_values table

post_taxonomy_values ('taxonomy'引用分类法表中的ID,'value'引用taxonomy_values表中的ID):

post_taxonomy_values table

我已经编写并重写了这个查询,但我无法理解这个问题,我们将非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题

select 
cases.title, cases.content, cases.status, 
max(case when post_taxonomy_values.post = cases.id and taxonomies.title = 'Tags' then taxonomies.title else '' end) as Tags,
max(case when post_taxonomy_values.post = cases.id and taxonomies.title = 'Tags' then taxonomy_values.value.value else '' end) as Tags_value,
max(case when post_taxonomy_values.post = cases.id and taxonomies.title = 'Court' then taxonomies.title else '' end) as Court,
max(case when post_taxonomy_values.post = cases.id and taxonomies.title = 'Court' then taxonomy_values.value.value else '' end) as Court_value,
.
.
.

from cases, post_taxonomy_values, taxonomies, taxonomy_values 
where 
cases.slug = 'b-v-dpp' and
taxonomies.id = post_taxonomy_values.taxonomy and
taxonomy_values.id = post_taxonomy_values.value
group by cases.title, cases.content, cases.status