sql - SQL确定N列中的2列是否具有特定值
问题描述
我想知道 SQL(特别是 Oracle SQL)中是否有办法识别以下内容:
我有 10 列,称它们为 A、B、...、J。这些列中的每一列都是一个 Y/N 字段。如果至少有两列是“Y”,我希望能够确定给定行。我打算做一个case when声明,但我不知道是否有一种简单的方法可以做到这一点,而无需写出每一个排列。
提前致谢。
解决方案
您可以将 映射Y
到 1 和N
0,然后对各列的值求和,如果它加起来为 2 或更多,那么您至少有两列包含Y
.
Oracle 11g R2 模式设置:
CREATE TABLE table_name ( A, B, C, D, E, F, G, H, I, J ) AS
SELECT 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N' FROM DUAL UNION ALL
SELECT 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N' FROM DUAL UNION ALL
SELECT 'N', 'Y', 'N', 'Y', 'N', 'N', 'N', 'N', 'N', 'N' FROM DUAL UNION ALL
SELECT 'N', 'N', 'Y', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N' FROM DUAL;
查询 1:
SELECT *
FROM table_name
WHERE DECODE( A, 'Y', 1, 0 )
+ DECODE( B, 'Y', 1, 0 )
+ DECODE( C, 'Y', 1, 0 )
+ DECODE( D, 'Y', 1, 0 )
+ DECODE( E, 'Y', 1, 0 )
+ DECODE( F, 'Y', 1, 0 )
+ DECODE( G, 'Y', 1, 0 )
+ DECODE( H, 'Y', 1, 0 )
+ DECODE( I, 'Y', 1, 0 )
+ DECODE( J, 'Y', 1, 0 ) >= 2
结果:
| A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|
| N | Y | N | Y | N | N | N | N | N | N |
| N | N | Y | N | N | N | Y | N | Y | N |
您也可以使用CASE a WHEN 'Y' THEN 1 ELSE 0 END
代替DECODE
函数。
查询 2:
SELECT *
FROM table_name
WHERE CASE A WHEN 'Y' THEN 1 ELSE 0 END
+ CASE B WHEN 'Y' THEN 1 ELSE 0 END
+ CASE C WHEN 'Y' THEN 1 ELSE 0 END
+ CASE D WHEN 'Y' THEN 1 ELSE 0 END
+ CASE E WHEN 'Y' THEN 1 ELSE 0 END
+ CASE F WHEN 'Y' THEN 1 ELSE 0 END
+ CASE G WHEN 'Y' THEN 1 ELSE 0 END
+ CASE H WHEN 'Y' THEN 1 ELSE 0 END
+ CASE I WHEN 'Y' THEN 1 ELSE 0 END
+ CASE J WHEN 'Y' THEN 1 ELSE 0 END >= 2
结果:
| A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|
| N | Y | N | Y | N | N | N | N | N | N |
| N | N | Y | N | N | N | Y | N | Y | N |
推荐阅读
- css - 位置:粘在css网格中?
- html - 选择输入大于引导程序 4 中的输入字段
- botframework - 对 botframework 的多个 Slack 通道支持
- python-3.x - 如果 glmnet 确实需要浮点数,为什么当我提供浮点数时 glmnet.py 会在 cvglmnet 上抛出 TypeError?
- sql - 变量字符串:需要获取位于分隔符之间的子字符串
- r - 使用 ggbarplot 的 x 数据以外的其他列作为 x 标签
- c# - 如何使用 MVVM 在 WPF 中基于绑定到 X 和 Y 位置属性从 Canvas 上的 2 个列表中分发模板项目
- scala - 使用类型化 UDAF 推断为二进制的列类型
- java - 在 Web 服务中执行 SOAP 身份验证的最佳方式是什么?
- asp.net-mvc - 如何将带有连字符和冒号的属性添加到剃须刀中的 Html Helper 方法?(vuejs 语法)