【问题标题】:SQL: JOIN multiple rows depending on values in multiple rowsSQL:根据多行中的值连接多行
【发布时间】:2013-08-30 20:31:45
【问题描述】:

我想从一个表中选择并使用 CASE 语句连接三行。我更习惯于 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

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

【问题讨论】:

  • 关于您的伪劣格式:只需将行缩进4个空格(或突出显示行并按工具栏上的“代码示例”按钮{ })即可获得那些格式正确
  • 如果您在 value1 和 value2 中使用其他数字,则可以更好地说明您的目标。当一切都是 1 或 0 时,要辨别您的目标并不容易。
  • 我认为1和0最清楚,我应该使用什么,也许是一些复数?

标签: sql select join case


【解决方案1】:

这根本不是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

【讨论】:

  • 谢谢一百万,这就像一个魅力:)(我也会记住这种格式)
猜你喜欢
  • 2013-11-04
  • 2021-03-22
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2016-06-13
  • 2021-02-24
  • 2022-08-16
相关资源
最近更新 更多