SQL:根据多行中的值加入多行

时间:2013-08-30 20:31:46

标签: sql select join case

我想从表中选择SELECT并使用CASE语句JOIN三行。我更习惯于C ++,它将是一个IF语句,这里是错误的伪代码(这适用于任何待连接的行,即如果任何待连接的行具有.. 。)

IF (value1 == 1) // IF any of the rows have value1 == 1
{
    value1 = 1;
    value2 = 0;
}
ELSE IF (value1 == 0 && value2 == 1) // IF all of the rows have value1 == 0 and any have value2 == 1 
{
    value1 = 0;
    value2 = 1;
}

所以例如,如果三行如下所示(ID必须相同,不要问我为什么......)

ID    value1  value2
--------------------
 1      1       0
 1      0       0
 1      0       1

我希望结果连接的行是

 1      1       0

但是,如果三个原始行看起来像

ID    value1  value2
--------------------
 1      0       0
 1      0       0
 1      0       1

然后我希望得到的连接行是

 1      0       1

我很抱歉伪劣的表格式,我不习惯标记。任何帮助或指示正确的方向将不胜感激。速度不应该是一个问题,因为每个查询不得超过三行。

1 个答案:

答案 0 :(得分:0)

这根本不是JOIN,您似乎需要按照逻辑汇总结果。很高兴知道你正在使用什么RDBMS,但这应该适用于大多数:

SELECT  ID,
        Value1,
        CASE WHEN Value1 = 1 THEN 0 ELSE Value2 END Value2
FROM (  SELECT  ID,
                MAX(CASE WHEN Value1 = 1 THEN 1 ELSE 0 END) Value1,
                MAX(Value2) Value2
        FROM YourTable
        GROUP BY ID) A