日期:2014-05-17  浏览次数:20879 次

关于字段名与字段值的关联
有一张横表A 值是这样的

有一张表B 是这样的
 

表B里面的col_value 字段的值是对应表A的字段名,我要的结果是表A的字段名下面的值跟表Bcol_value 字段的值相对应的关联在一起,比如表A col1 的值是‘满意’,表B col_value 里面的COL1 对应的是‘用户对我们服务是否满意’
我要的结果是‘用户对我们服务是否满意(满意)’

------解决方案--------------------
开始以为能直接通过子查询完成  没想到直接方法  暂时想到下面这种.. 还要调试下 不知道对不 大致思路是这样的

下面b表2个字段简化了:c_v,p_n

create or replace procedure p1 is
Cursor cursor is select c_v from t_b order by c_v;
  sqlstr varchar2(4000);
begin
  for c_name in cursor loop 
  begin
  sqlstr := sqlstr + ' select c_v,p_n,(select '
------解决方案--------------------
c_name.c_v
------解决方案--------------------
' from t_a where t_b.c_v = '''
------解决方案--------------------
c_name.c_v
------解决方案--------------------
''') c1 from t_b where c_v = '''
------解决方案--------------------
c_name.c_v
------解决方案--------------------
''' union all ';
  end;
  end loop;
  --DBMS_OUTPUT.PUT_LINE(sqlstr); --打印sql
  EXECUTE IMMEDIATE (sqlstr);   --执行sql
end p1; 

------解决方案--------------------
写个存储过程试试?

DECLARE

BEGIN

    ...
    FOR colList IN
    (SELECT * FROM col WHERE tname = 'OF_GW_JB'--这里写楼主你自己的查询语句
    )
    LOOP
      --return colList.colname 
------解决方案--------------------
 '(' 
------解决方案--------------------
 colList.value 
------解决方案--------------------
 ')'
      --换电脑把ORACLE删除了。没办法试,呵呵
    END LOOP;
    ...

END;
------解决方案--------------------
create  table test1 
(
COL1 varchar(50),
COL2 varchar(50),
COL3 varchar(50),
COL4 varchar(50),
COL5 varchar(50),
COL6 varchar(50),
COL7 varchar(50),
COL8 varchar(50)
);


insert into test1 select '1','2','3','4','5','6','7','8' from dual
select * from test1
Create  Table test1_reverse  
(col varchar(10),colvalue varchar(50)); 
select * from test1_reverse
select 
'insert into test1_reverse(col,colvalue) select '
------解决方案--------------------