SQL:将两个结果行合并为一个

时间:2017-09-24 20:53:08

标签: mysql sql postgresql pivot-table

在数据库中,

  • 每个testcontentelement都有许多testcontentelementcetpropertyvalue
  • 每个contentelementtypeproperty都有许多testcontentelementcet属性值

此查询

select tce.id, tce.stem, tce.prompt, tcep.contentelementtypepropertykey, 
cetp.value from testcontentelement tce 
  INNER JOIN testcontentelementcetpropertyvalue tcep
    ON tce.id = tcep.testcontentelementid
  INNER JOIN contentelementtypeproperty cetp
    ON tcep.contentelementtypepropertyid = cetp.id 
  WHERE tcep.contentelementtypepropertykey like 
'%cet_property_cati_msproperties_assessed_category%'and cetp.value NOT LIKE 
'%HI_%' 
  ORDER BY tce.id;

呈现此结果:

  id    stem    prompt  contentelementtypepropertykey   value
1392    aaaa    a1      assessed_category_A             Asian Studies
1392    aaaa    a1      assessed_category_B             R01_LIKERT
1397    cccc    c1      assessed_category_B             R01_LIKERT
1397    cccc    c1      assessed_category_A             Biology
1402    eeee    e1      assessed_category_A             Chemistry
1402    eeee    e1      assessed_category_B             R01_LIKERT

但是我希望按照以下方式检索每个TWO行合并为一行:

  id    stem    prompt  contentelementtypepropertykey   valueA          ValueB
1392    aaaa    a1      assessed_category_A             Asian Studies    R01_LIKERT

有人可以建议一种方法吗?

2 个答案:

答案 0 :(得分:0)

假设你只有两行,其他的cols将具有相同的值,

select tce.id, 
       max(tce.stem), 
       max(tce.prompt), 
       max(tcep.contentelementtypepropertykey), 
       max(cetp.value) valueA, 
       min(cetp.value) valueB 
from testcontentelement tce 
***All your conditions***
group by id

答案 1 :(得分:0)

您确定这是该查询的结果集吗?

使用您在contentelementtypepropertykey上使用的过滤器,这是不可能的。

此外,不确定您是否知道,但与LIKE一起使用时,“_”是一个特殊字符。 e.g。

like '%HI_%'

会返回以下结果:

CHILL
HIM
HIMSELF
HIT
HITMAN

基本上,任何角色都被接受而不是下划线,只要它是一个角色。