假设我有一个类似以下的查询:
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 --> Procedural Language
。
但是,如果您坚持要使用,则可以使用 游标进行循环, 以遍历[ DBA | ALL | USER] _TAB_COLS中的 所有列。您可以使用
SYS_REFCURSOR 来查看数据。首先,您必须构建 动态SQL 。
技术的学习是一个登山的过程。第一章是最为平坦的山脚道路。而从这一章开始,则是正式的爬坡。无论是我写作还是你阅读,都需要付出比第一章更多的代价。那么问题就是,付出更多的精力学习模板是否值得? 这个问题很功利,但是一针见血。因为技术的根本目的在于解决需求。那C++的模板能做什么? 一个高(树)大(新)上(风)的回答是,C++里面的模板,犹如C中的宏、C#和Java中的自省(restropection)
元编程 避免无谓的元编程。 当编写程序库时,不要使核心类混乱(不要使用 monkey patch)。 对于 class_eval 方法,倾向使用区块形式,而不是字符串插值形式。 当使用字符串插值形式时,总是提供 __FILE__ 及 __LINE__,以使你的调用栈看起来具有意义: class_eval 'def use_relative_model_naming?; true; end', __
Metaprogramming is a programming technique in which computer programs have the ability to treat other programs as their data. It means that a program can be designed to read, generate, analyze or tran
javascript元编程? 问题来自于codewars The builder of things 要求我们实现一个Thing类,其中一点要求如下所示: 难点是这里的name的值从哪里找啊? 我想到的一个方案是使用with,但是codewars上使用的是严格模式,不能使用with。
Swift 是编写程序的绝佳选择,无论是手机、电脑还是服务器,任何能跑代码的设备都是如此。它是一门集现代语言之大成,集结了苹果的工程师文化精髓以及开源社区多样化于一身的编程语言。编译器为专为性能所调优,语言专为开发所优化,二者绝不互相妥协。
明编程语言是一种简单快速的动态脚本语言。他支持以下特性 解释执行,不需要编译 动态参数类型,不需要设定参数类型 通过GC(垃圾收集器)自动管理内存分配和释放 面向对象 多重继承 操作符重载 提供数据构建操作符,方便复杂对象的创建 闭包与函数等价 多核/多线程优化 支持嵌入其他类型的文本文件(如HTML,XML) 支持用C/C++扩展 提供C API,可集成到其他程序中 明语言代码以GPL3发布。目