gpt4 book ai didi

sql - 元编程oracle sql select语句

转载 作者:行者123 更新时间:2023-12-02 09:28:59 25 4
gpt4 key购买 nike

假设我有一个如下查询:

SELECT
CASE WHEN ONE = 1 THEN 1 ELSE 0 END,
CASE WHEN JUST_ONE = 1 THEN 1 ELSE 0 END,
CASE WHEN ANOTHER_ONE = 1 THEN 1 ELSE 0 END,

CASE WHEN TWO = 1 THEN 1 ELSE 0 END,
CASE WHEN JUST_TWO = 1 THEN 1 ELSE 0 END,
CASE WHEN ANOTHER_TWO = 1 THEN 1 ELSE 0 END

-- 20 more things like that where changes only columns name
FROM
SOME_TABLE;

正如您所看到的,这两个组之间的唯一区别是,在第一个组中,我使用具有“ONE”的列,在第二个组中,我使用具有“TWO”的列,并且我的数据中有大约 30 个这样的组实际查询所以我想知道是否有办法以某种方式缩短它?

最佳答案

由于它们是不同的列,因此您必须在 SELECT 列表中单独显式提及它们。您无法在纯 SQL 中动态执行此操作。

我建议,使用一个好的文本编辑器,编写整个 SQL 几乎不需要一两分钟。

您可以使用DECODE,它的语法会更少,而不是冗长的CASE表达式。

例如,

  DECODE(ONE, 1, 1, 0) AS col1, 
DECODE(JUST_ONE, 1, 1, 0) AS col2,
DECODE(ANOTHER_ONE, 1, 1, 0) AS col3,
DECODE(TWO, 1, 1, 0) AS col4,
DECODE(JUST_TWO, 1, 1, 0) AS col5,
DECODE(ANOTHER_TWO, 1, 1, 0) as col6

我建议坚持使用SQL,而不是使用PL/SQL。它们不一样,它们是不同的引擎。 PL --> 过程语言

但如果您坚持,那么您可以使用光标for循环来循环遍历[DBA|ALL|USER]_TAB_COLS中的所有列。您可以使用SYS_REFCURSOR来查看数据。首先,您必须构建动态 SQL

关于sql - 元编程oracle sql select语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35058934/

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