gpt4 book ai didi

SQL 解码 - 选择和位置

转载 作者:行者123 更新时间:2023-12-01 23:50:21 36 4
gpt4 key购买 nike

我有一个查询,我认为需要像这样(解码会更大)

SELECT
firstName,
lastName,
decode(mathMrk, 80, 'A', mathMrk) as decodeMath,
decode(engMrk, 80, 'A', engMrk) as decodeEng,
FROM table
WHERE
decode(mathMrk, 80, 'A', mathMrk) IN ('A','B','C')
OR decode(engMrk, 80, 'A', engMrk) IN ('A','B');

或者可能在哪里?

WHERE
decodeMath IN ('A','B','C')
OR decodeEng IN ('A','B');

目标是以某种格式获得所有学生的分数,但如果说用户希望看到英语只有“A”或数学只有“A”的学生(根据选择和原因哪里)他们只看到那些学生 - 但所有相关的标记

基本上问题是:如果我在 SELECT 中解码和别名,我是否也需要在 WHERE 中解码?如果我转换用户选择以匹配数据库而不是尝试解码会更好吗?尽管我的数据库有两种不同类型的数据作为标记,但我正在尝试将其转换为一种不同的类型,这也是用户从中选择的类型。

最佳答案

将其包装到 CASE 子句中。您还可以在 WHERE 子句中使用 CASE。

这是一个(简单的)工作示例,应该在任何 Oracle 架构上运行。
对于此示例,我将 object_id 转换为从 1 到 100 的等级。

with grades as
(select object_name as student,
mod (object_id, 99) + 1 as mathmark,
case
when mod (object_id, 100) + 1 between 0 and 20 then 'F'
when mod (object_id, 100) + 1 between 21 and 40 then 'D'
when mod (object_id, 100) + 1 between 41 and 60 then 'C'
when mod (object_id, 100) + 1 between 61 and 80 then 'B'
when mod (object_id, 100) + 1 between 81 and 100 then 'A'
end
as mathdecode
from user_objects)
select *
from grades
where mathdecode in ('A', 'B')

关于SQL 解码 - 选择和位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889691/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com