我想从表中选择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
我很抱歉伪劣的表格式,我不习惯标记。任何帮助或指示正确的方向将不胜感激。速度不应该是一个问题,因为每个查询不得超过三行。
答案 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