请教个 oracle 查询问题

qinhuione 2012-12-07 01:59:51
大家好,请问下 oracle 查询可以做以下实现吗? 怎么添加空行?
(虚拟数据)
table_name A
column_name c1 c2 c3 c4 ... c50
column_value a v v v ... v
column_value a v v v ... v
column_value c v v v ... v
column_value c v v ... v
column_value c v v v ... v
column_value a v v v ... v
column_value a v v v ... v
column_value a v v ... v
column_value b v v v ... v
column_value b v v v ... v


如,根据 c1 key 查询 c1 in (a,b,c,d) 和 判断 c3 c4 的值是否为空
想要返回以下数据:
c1 c2 c3 c4 ... c50
d:没有数据
a v v v ... v
a v v v ... v
c v v v ... v
c v v ... v
c3:值为空
c v v v ... v
a v v v ... v
a v v v ... v
a v v ... v
c4:值为空
b v v v ... v
b v v v ... v

如果in条件后的key 在数据库找不到就在上面添加一行数据说没有数据
如果某一条数据的某一列值为空就在该数据下方添加一行数据说明

可以做这种实现吗?
...全文
122 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinhuione 2012-12-07
  • 打赏
  • 举报
回复
纠结吧,我也纠结
izj 2012-12-07
  • 打赏
  • 举报
回复
引用 3 楼 restbely 的回复:
WITH TEST AS ( SELECT 'A' AS STR,'1' AS STR1,'2' AS STR2,'3' AS STR3,'4' AS STR4 FROM DUAL UNION ALL SELECT 'A' AS STR,'1' AS STR1,'2' AS STR2,'' AS STR3,'4' AS STR4 FROM DUAL UNION ALL SELECT 'B……
哈哈哈。。
小海葵1 2012-12-07
  • 打赏
  • 举报
回复
WITH TEST AS ( SELECT 'A' AS STR,'1' AS STR1,'2' AS STR2,'3' AS STR3,'4' AS STR4 FROM DUAL UNION ALL SELECT 'A' AS STR,'1' AS STR1,'2' AS STR2,'' AS STR3,'4' AS STR4 FROM DUAL UNION ALL SELECT 'B' AS STR,'1' AS STR1,'2' AS STR2,'3' AS STR3,'4' AS STR4 FROM DUAL UNION ALL SELECT 'B' AS STR,'1' AS STR1,'2' AS STR2,'3' AS STR3,'' AS STR4 FROM DUAL UNION ALL SELECT 'C' AS STR,'1' AS STR1,'2' AS STR2,'3' AS STR3,'4' AS STR4 FROM DUAL UNION ALL SELECT 'C' AS STR,'1' AS STR1,'2' AS STR2,'' AS STR3,'' AS STR4 FROM DUAL ), TEST1 AS ( SELECT 'A' AS STR FROM DUAL UNION ALL SELECT 'B' AS STR FROM DUAL UNION ALL SELECT 'C' AS STR FROM DUAL UNION ALL SELECT 'D' AS STR FROM DUAL ) SELECT ROWNUM AS RN,TEST.* FROM TEST UNION SELECT * FROM( SELECT ROWNUM AS RN, TRIM(BOTH ',' FROM DECODE(STR,NULL,STRA || ':' || 'IS NOT EXIST', DECODE(STR3, NULL, 'STR3:IS NULL') || ',' || DECODE(STR4, NULL, 'STR4:IS NULL'))) AS STR,'' AS STR1,'' AS STR2,'' AS STR3,'' AS STR4 FROM (SELECT TEST1.STR AS STRA,TEST.* FROM TEST1 LEFT JOIN TEST ON TEST1.STR = TEST.STR)) WHERE STR IS NOT NULL ======================================= 1 1 A 1 2 3 4 2 2 A 1 2 4 3 2 STR3:IS NULL 4 3 B 1 2 3 4 5 4 B 1 2 3 6 4 STR4:IS NULL 7 5 C 1 2 3 4 8 6 C 1 2 9 6 STR3:IS NULL,STR4:IS NULL 10 7 D:IS NOT EXIST 这个是我写过最纠结的一个SQL。
izj 2012-12-07
  • 打赏
  • 举报
回复
用with as 可以实现。。 不果貌似是临时表。。
qinhuione 2012-12-07
  • 打赏
  • 举报
回复
补充一下; 不能用存储过程和临时表
最近在研究如何用 易语言 连接oracle数据库,搜集了网上很多源码和请教了一些人都没能测试成功。 经过不懈努力,我终于测通了!哈哈哈哈~ 不过,我想吐槽的是: 在搜集资料过程中,发现很多人都说易语言很难连上oracle,讲真,我也觉得官方不够给力! oracle作为全球第一大数据库厂商,为什么出易语言的官方支持库来适配呢? 虽然说可以通过调用windows的odbc来连,但这对不懂的人来说是很困难的一件事! 所以,真心希望官方能开发出oracle的支持库!!! 在测试过程中,我总结了以下几个需要注意的点: 1、无论你的电脑是32位还是64位,都必须安装32位的oracle客户端。安装类型可以是:管理员、运行时。 2、从oracle 11g以后,oracle官方不再提供32位的客户端安装介质。目前最新的oracle客户端为win32_11gR2_client.zip,可直接从官网下载。 3、选择DRIVER连接时,需要先在$ORACLE_HOME/network/admin/tnsnames.ora文件中的定义的一个连接名,测试成功后再将连接名配置在SERVER(连接服务名)中。 4、选择DSN连接时,需要先在OS系统数据源(32位)中配置好数据源,测试成功后再将数据源名称配置在DSN(数据源)中。 只要你按照以上几点来,就肯定可以用易语言连接oracle,并执行简单查询。 我自己的测试代码已分享出来了,需要oracle客户端的朋友可以去官方下载,也可以私信我。 好了,第一次参加这么盛大的活动,小小意思,请各位看官指点,谢谢!

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧