在写查询语句时,可能会遇到这种场景:怎么
排除
某个字段查询表数据,这种情况特别是在当表字段特别多的时候,如果一个字段一个字段写
select t.a,t.b,t.c,t.xx ... from table_name t
特别麻烦,还容易写漏掉。
先获取到所有字段的查询语句
去掉不需要的字段即可
开始前先看常规查询
查询所有字段
select * from table_name
查询几个字段
select t.name,t.password,t.tel from table_name t
排除某个字段查询
获取所有表字段
SELECT
'select ' || a.cols || ' from ' || a.table_name as sqlstring
SELECT
t.table_name,
LISTAGG( t.COLUMN_NAME,',') WITHIN GROUP ( ORDER BY t.COLUMN_NAME ) cols
user_tab_columns t
WHERE
t.TABLE_NAME = 'SR_SPONSOR'
GROUP BY
t.table_name
获取到查询所有字段的语句
这样不需要自己一个一个去写,去掉不需要的字段即可,还可以创建成函数,方便后期使用
select PID,REPSONSIBILITY_ID,SIGNATURE,SIGNATURE_TIME,SPONSOR,SPONSOR_ID,SPONSOR_JOB,SPONSOR_ORG from SR_SPONSOR
oracle listagg() 列转行函数
该函数可以实现按条件实现列转行:
基础的用法如下:
LISTAGG(a,b) WITHIN GROUP( ORDER BY c)
a:需要拼接的数据表中的字段
b:以什么字符分割,例如逗号,分号等字符
c b
与c
是相同的字段
它的用法就像聚合函数一样,通过Group by语句,把每个Group的一个字段,拼接起来。
SELECT LISTAGG(t.name, ',') within group(ORDER BY t.name) FROM t_employee t ;
查询结果:
name1,name2,name3
- 489
-
Squids数据库云服务提供商
Oracle
MySQL
- 151
-
万物不及遇见
Oracle
掘金·日新计划
- 1105
-
Lucifer三思而后行
Oracle
Shell
- 778
-
万物不及遇见
Oracle
掘金·日新计划
- 9956
-
WHYBIGDATA
Oracle
Linux
掘金·日新计划
- 914
-
DuebassLei
Spring Boot
- 7318
-
DuebassLei
Spring Boot
- 2244
-
DuebassLei
Spring Boot