现在结果为:
field1 value1
field2 value2
field3 value3
field4 value4我想要的结果是
field1 field2 field3 field4
value1 value2 value3 value4也就是把filed作为字段名,value作为值,这样输出,有什么办法吗?

解决方案 »

  1.   

    看这里的例子: http://blog.csdn.net/dinya2003/archive/2004/11/30/198816.aspx
      

  2.   

    用decode(col1,filed1,value1,'')来转成行
      

  3.   

    问题是有多少行是不定的,field和value完全是未知的内容,decode不行的
      

  4.   


    看看下面这个例子也许对你有帮助:
    “INSERT INTO t_col_row VALUES (6, NULL, NULL, 'v35');
    INSERT INTO t_col_row VALUES (7, NULL, NULL, NULL);
    COMMIT;SELECT * FROM t_col_row;1)UNION ALL
    适用范围:8i,9i,10g及以后版本
    SELECT id, 'c1' cn, c1 cv
    FROM t_col_row
    UNION ALL
    SELECT id, 'c2' cn, c2 cv
    FROM t_col_row
    UNION ALL
    SELECT id, 'c3' cn, c3 cv FROM t_col_row;若空行不需要转换,只需加一个where条件,
    WHERE COLUMN IS NOT NULL 即可。”
      

  5.   

    因为where条件是传进去的,而且条件里还会用到一些function,所以不能在高级语言里做处理
    最后我还是用游标做了处理
    procedure sp_Check_Turn_Condition(
    p_run_id in number,
    p_condition in varchar2,
    p_return OUT Cur_retrieve
    )
    as
    m_sql varchar2(4000) := 'SELECT';
    cursor cur
    is
    select itemTitle,
           itemValue
    from   s_t_flow_run_item_value
    where  runid = p_run_id;
    curType cur%rowtype;
    begin
    open cur;
    loop
    fetch cur into curType;
          exit when cur%notfound;
    m_sql := m_sql || ' ''' || curType.Itemvalue || ''' as ' || curType.Itemtitle || ',';
    end loop;
    m_sql := substr(m_sql, 0, length(m_sql) - 1);
    m_sql := m_sql || ' FROM DUAL';m_sql := 'SELECT * FROM (' || m_sql || ') WHERE ' || p_condition;open p_return for m_sql;
    end sp_Check_Turn_Condition;