【问题标题】:query to fetch the key based on est code or fetch default estcode value查询以根据 est 代码获取密钥或获取默认 estcode 值
【发布时间】:2017-01-30 14:21:03
【问题描述】:
  +----+--------------+-----------+--------------++--------------+
| 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 为 0 的那些 KEY。 此外,结果中不应有重复的 KEY,无论是带有 CODE 的 KEY 还是带有默认 CODE(0) 的 KEY。两者都不会出现。 必须注意,所有这些规则仅适用于记录的 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        |

【问题讨论】:

  • “est”代码是什么意思?
  • 问题已修改

标签: sql oracle jpql


【解决方案1】:

你可以使用 where

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)

【讨论】:

  • 我们也可以在其中添加活动条件吗?这些规则仅适用于活动记录
  • @user630209 请更好地解释你需要什么-
【解决方案2】:

您可以使用以下查询:

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

【讨论】:

    【解决方案3】:
    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'
    )
    

    这应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多