0

我对以下抽象示例上下文有一个 SQL 查询问题:我的 sql 查询有 2 个不同的输入数据,定义为“MainElement”,其中一个的键为 123,另一个主元素的键为 789。

此外,我有一个名为Relation的表pk,其中包含FirstElementSecondElementThirdElement

此外,还有一个名为Propspk的表,其中包含name和列valueString。关于此上下文的特殊功能是 Props 中的 columnname定义另外 2 个列,称为4thElement5thElementtable Relation作为一行,其值位于 column valueString

|pk | 1stElement | 2ndElement | 3rdElement |
|abc|-----123----|-----456----|-----null---|
|def|-----789----|-----101112-|---131415---|

|Pk | Name | ValueString |
|def|4thElement|161718---|
|def|5thElement|ghi------|

如您所见,MainElement 789在Props4thElement中具有and的值,但5thElementProps中MainElement 123没有任何值。

我需要的是一个带有输入值的通用 SQL 查询,例如 123 或 789 ,它返回两个主要元素的结果,与 123 在Props中没有任何值1stElement的事实无关。MainElement

样本结果:

|1stElement | 2ndElement | 3rdElement | 4thElement | 5thElement |
|123--------|------456---|-----null---|---null-----|----null----|
|789--------|----101112--|---131415---|---161718---|----ghi-----|

我正在使用Oracle SQL Developer

Select 
rel.1stElement,
....
From 
Relation rel,
Props pro,
Where 
?

提前致谢。

4

1 回答 1

1

这应该可以完成工作,这通常是您需要的数据透视查询:

SELECT rel.pk, rel.1stElement, rel.2ndElement, rel.3rdElement 
     , MAX(CASE WHEN pro.Name = '4thElement' 
           THEN pro.ValueString 
           ELSE NULL
           END) as 4thElement
     , MAX(CASE WHEN pro.Name = '5thElement' 
           THEN pro.ValueString
           ELSE NULL
           END) as 5thElement
FROM Relation rel 
    LEFT OUTER JOIN Props pro 
        ON rel.pk = pro.pk
GROUP BY rel.pk, rel.1stElement, rel.2ndElement, rel.3rdElement
于 2013-04-17T14:25:47.100 回答