+----+--------------+-----------+--------------++--------------+
| ID | KEY | CODE | VALUE | ACTIVE |
+----+--------------+-----------+--------------+---------------+
| 1 | MIN_VAL_EMP | 111 | 100 | Y |
+----+--------------+-----------+--------------+---------------+
| 2 | MIN_VAL_MARR | 222 | 110 | Y |
+----+--------------+-----------+--------------+---------------+
| 3 | MIN_VAL_FOOD | 0 | 10 | Y |
+----+--------------+-----------+--------------+---------------+
| 4 | MAX_VAL_EMP | 121 | 8000 | Y |
+----+--------------+-----------+--------------+---------------+
| 5 | MAX_VAL_MARR | 0 | 20 | Y |
+----+--------------+-----------+--------------+---------------+
| 6 | MAX_VAL_FOOD | 0 | 30 | Y |
+----+--------------+-----------+--------------+---------------+
| 7 | MIN_VAL_EMP | 0 | 80 | Y |
+----+--------------+-----------+--------------+---------------+
需要编写查询,
如果我的CODE值存在,则获取该信息,如果不存在则获取那些带CODE的KEY为0。 此外,结果中不应存在重复的KEY,无论是带CODE的KEY还是默认的CODE(0)。两者都不会出现。 必须注意,所有这些规则仅适用于记录的ACTIVE = Y
例如,如果我的CODE是111。
结果将是,
+----+----+--------------+-----------+--------------+
| ID | KEY | CODE | VALUE |
+----+--------------+-----------+--------------+
| 1 | MIN_VAL_EMP | 111 | 100 |
+----+--------------+-----------+--------------+
| 3 | MIN_VAL_FOOD | 0 | 10 |
+----+--------------+-----------+--------------+
| 5 | MAX_VAL_MARR | 0 | 20 |
+----+--------------+-----------+--------------+
| 6 | MAX_VAL_FOOD | 0 | 30 |
+----+--------------+-----------+--------------+
这里,下面的行不会是结果的一部分,因为我们带有CODE 111的KEY。
| 7 | MIN_VAL_EMP | 0 | 80 |
答案 0 :(得分:1)
您可以使用
中的位置select distinct id, key, code, value
frm my_table
where (key,code) in (select key, max(code)
from my_table where code = 111 or code = 0
group by key)
答案 1 :(得分:0)
您可以使用以下查询:
SELECT ID, KEY, CODE, VALUE
FROM (
SELECT ID, KEY, CODE, VALUE,
ROW_NUMBER() OVER (PARTITION BY KEY
ORDER BY CASE
WHEN KEY = 111 THEN 1
ELSE 2
END) rn
FROM mytable
WHERE ACTIVE = 'Y' AND CODE IN (111, 0)) t
WHERE t.rn = 1
答案 2 :(得分:0)
select t.id, t.key,t.code, t.value from table t
where t.code= 111 and t.active = 'y'
union
select t.id, t.key,t.code, t.value from table t
where t.code= 0 and t.key not in
(
select t.key from table t
where t.code= 111 and t.active = 'y'
)
这应该有效