【问题标题】:SQL: how to check that any 2 columns out of 9 columns have the same value? [closed]SQL:如何检查 9 列中的任何 2 列是否具有相同的值? [关闭]
【发布时间】:2020-06-24 18:54:31
【问题描述】:

我有 9 个二进制列(值 0/1)。我需要从整个表中过滤掉这 9 列中的任何一个值为 1 的行。所以我正在使用:

select * 
from T 
where (colA = 1 or colB = 1 or colC = 1 or colD = 1 or ...... colH = 1 or colI = 1)

但是这 2 列中的任何一个也可以同时具有值​​ 1,例如 colA = 1 and colB = 1 同时。因此,要在 9 列上检查这些,我必须编写此查询 55 次。

我如何编写一个查询,以便它在所有 9 个中查找具有相同值的任何 2 并计算其数量。

【问题讨论】:

  • 我需要过滤掉行...编写查询不同,这样它将在所有 9 个具有相同的值并计算其数量。说明你想要什么。

标签: sql sql-server amazon-athena


【解决方案1】:

嗯。 . .我想你基本上想要:

 where (colA + colB + colC + colD + colE + colF + colG + colH + colI) = 2

如果“二进制”是指bit,则需要转换它们:

where ( convert(int, colA) +
        convert(int, colB) +
        convert(int, colC) +
        convert(int, colD) +
        convert(int, colE) +
        convert(int, colF) +
        convert(int, colG) +
        convert(int, colH) +
        convert(int, colI)
      ) = 2
        

【讨论】:

  • 抱歉错过了,可能有 3 列的值为 1。而二进制我的意思是这些列中的值是 0 或 1。
  • 另一方面,我可以使用您的第一个查询并将总和设为 1 而不是 2,因为这就是我想要的。我希望这 9 列中只有 1 列的值为 1。
  • @ParasPasrija 。 . .您可以根据需要调整总和。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多