2017-09-24 54 views
0

在数据库中,SQL:合并两个结果行成一个

  • 每个testcontentelement有许多testcontentelementcetpropertyvalue
  • 每个contentelementtypeproperty有许多testcontentelementcetpropertyvalue

这个查询

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 

但我宁愿检索与各两行,如下合并成一排:

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

有人能提出一个方法来做到这一点?

+0

使用此自加入。它应该工作。 –

+0

选择tce.id,tce.stem,tce.prompt,tcep.contentelementtypepropertykey, cetp.value,tcee.value VALUEB从testcontentelement TCE INNER JOIN testcontentelementcetpropertyvalue TCEP ON tce.id = tcep.testcontentelementid INNER JOIN contentelementtypeproperty CETP ON tcep.contentelementtypepropertyid = cetp.id INNER JOIN testcontentelement tcee ON tce.id = tcee.id WHERE tcep.contentelementtypepropertykey像 '%cet_property_cati_msproperties_assessed_category%' 和cetp.value NOT LIKE '%HI_%' ORDER BY tce.id; –

+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 
+0

对不起,不,每两行将合并成一行。我不清楚 – Jake

+1

所以你会有超过两行的特定ID?如果你有一个特定的id三行,前两个将被合并。第三个呢? – Valli

+0

现在,我会很高兴与两个。它可能稍后动态,但现在不是必需 – Jake

0

你确定那是结果集的查询?

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

此外,不知道您是否知道,但使用LIKE时是'_'是一个特殊字符。 例如

like '%HI_%' 

将返回以下结果:

CHILL 
HIM 
HIMSELF 
HIT 
HITMAN 

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