描述:如果我又一张表:
-------------------------
FIELD1    FIELD2     FIELD3
-------------------------
规定FILD1填充了值,才能填充FILD2,也就是说如果FILED2有值的话FIELD肯定有值,FILED3可有可无,一次类推,这里只写了3个字段实际可以有更多,但是填写规则必须满足前面的要求。
问题1:又没有办法可以一次查出一条记录中多少个FIELD1....N字段被使用现在小弟使用的游标来判断的;
问题2:有没有办法把一条这样的一条记录通过通过查询以后以FIELDNAME value的形式显示出来:如有一条记录为:
FIELD1    FIELD2     FIELD3
你好      谢谢       帮助最终查询出来的结果为:
FIELDNAME value
FIELD1  你好
FIELD2  谢谢
FIELD3  帮助或者干脆把这条记录直接查询出这样的结果也可以:“你好,谢谢,帮助”问题2可以描述为:把一行记录转换成

解决方案 »

  1.   

    我总结下你的问题
    问题一:有没有办法能够知道哪些 filed 字段有值
    问题二:列传行是这样吗?
      

  2.   


    -- 查找有值的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 
      

  3.   


    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括号当一个表使用