我有一个名为'Alphabets'的表,其中的列名为'A to G'。
Table Name: Alphabets
Column Names: A | B | C | D | E | F | G
现在,我需要一个SQL查询来从表中检索满足以下列表中至少四个条件的所有行:
A = 1
B = 2
C = 3
D = 4
E = 5
F = 6
G = 7
我正在使用Oracle 10g数据库。
答案 0 :(得分:8)
SELECT * FROM Alphabets where
CASE WHEN A=1 THEN 1 ELSE 0 END +
CASE WHEN B=2 THEN 1 ELSE 0 END +
CASE WHEN C=3 THEN 1 ELSE 0 END +
CASE WHEN D=4 THEN 1 ELSE 0 END +
CASE WHEN E=5 THEN 1 ELSE 0 END +
CASE WHEN F=6 THEN 1 ELSE 0 END +
CASE WHEN G=7 THEN 1 ELSE 0 END >= 4
但有关此表和查询的内容似乎令人怀疑 - 感觉它应该是一个包含两列的表,Letter
和Value
。
答案 1 :(得分:5)
我能想到的一个丑陋的解决方案(我确信必须有更好的解决方案,但是这个解决方案应该有效,但我不认为它在任何意义上都是最优的......)
SELECT *
FROM Alphabets
WHERE
CASE WHEN A=1 THEN 1 ELSE 0 END +
CASE WHEN B=2 THEN 1 ELSE 0 END +
CASE WHEN C=3 THEN 1 ELSE 0 END +
CASE WHEN D=4 THEN 1 ELSE 0 END +
CASE WHEN E=5 THEN 1 ELSE 0 END +
CASE WHEN F=6 THEN 1 ELSE 0 END +
CASE WHEN G=7 THEN 1 ELSE 0 END BETWEEN 4 AND 7
这有问题: