描述:如果我又一张表:
-------------------------
FIELD1 FIELD2 FIELD3
-------------------------
规定FILD1填充了值,才能填充FILD2,也就是说如果FILED2有值的话FIELD肯定有值,FILED3可有可无,一次类推,这里只写了3个字段实际可以有更多,但是填写规则必须满足前面的要求。
问题1:又没有办法可以一次查出一条记录中多少个FIELD1....N字段被使用现在小弟使用的游标来判断的;
问题2:有没有办法把一条这样的一条记录通过通过查询以后以FIELDNAME value的形式显示出来:如有一条记录为:
FIELD1 FIELD2 FIELD3
你好 谢谢 帮助最终查询出来的结果为:
FIELDNAME value
FIELD1 你好
FIELD2 谢谢
FIELD3 帮助或者干脆把这条记录直接查询出这样的结果也可以:“你好,谢谢,帮助”问题2可以描述为:把一行记录转换成
-------------------------
FIELD1 FIELD2 FIELD3
-------------------------
规定FILD1填充了值,才能填充FILD2,也就是说如果FILED2有值的话FIELD肯定有值,FILED3可有可无,一次类推,这里只写了3个字段实际可以有更多,但是填写规则必须满足前面的要求。
问题1:又没有办法可以一次查出一条记录中多少个FIELD1....N字段被使用现在小弟使用的游标来判断的;
问题2:有没有办法把一条这样的一条记录通过通过查询以后以FIELDNAME value的形式显示出来:如有一条记录为:
FIELD1 FIELD2 FIELD3
你好 谢谢 帮助最终查询出来的结果为:
FIELDNAME value
FIELD1 你好
FIELD2 谢谢
FIELD3 帮助或者干脆把这条记录直接查询出这样的结果也可以:“你好,谢谢,帮助”问题2可以描述为:把一行记录转换成
问题一:有没有办法能够知道哪些 filed 字段有值
问题二:列传行是这样吗?
-- 查找有值的FIELD数量
SELECT NVL2(FIELD1,0,1) + NVL2(FIELD2,0,1) + NVL2(FIELD3,0,1) ... + NVL2(FIELDn,0,1) FROM TABLE1-- 合并FIELD
SELECT RTRIM(NVL2(FIELD1,'',FIELD1||',') + NVL2(FIELD2,'',FIELD2||',') + NVL2(FIELD3,'',FIELD3||',') ... + NVL2(FIELDn,'',FIELDn),',') FROM TABLE1
-- 列转行
SELECT 'FIELD1',FIELD1 FROM TABLE1 UNION ALL
SELECT 'FIELD2',FIELD2 FROM TABLE1 UNION ALL
SELECT 'FIELD3',FIELD3 FROM TABLE1 UNION ALL
...
SELECT 'FIELDn',FIELDn FROM TABLE1
id FIELD1 FIELD2 FIELD3 加一个ID 唯一性
然后用楼上的union 后面加个条件 查询当列不为空
SELECT id as id,'FIELD1' as filed,FIELD1 as value from table1 FROM TABLE1 UNION ALL
SELECT id as id,'FIELD2' as filed,FIELD2 as value from table1 where field2 is not null UNION ALL
SELECT id as id,'FIELD3' as filed,FIELD3 as value from table1 where field3 is not null UNION ALL转了之后的表数据存为A表(过滤了为空的字段)如下
id filed value
1 FILED1 您好
1 FILED2 谢谢
1 FILED3 帮助
2 FILED1 您好2
2 FILED2 谢谢2
3 FILED1 您好3
....这样就行转列了
然后再列转行
select a.id,wm_concat(a.filed||‘=’||a.value) from a 或者你不新建A表也可以,将前面那段SQL括号当一个表使用