t_view_cal 表内容如下:
C_DATA_VIEW    C_CN_CDE    C_FML_CDE   C_FML_NAME   C_FML
VW_ORDER       snow         折扣价       折扣价        n_unitprice*n_quantity
VW_ORDER 表内容如下:
C_PRODUCT   C_MONTH   N_UNITPRICE   N_QUANTITY   N_DISCOUNT  C_CUSTOMER  C_PRODUCT_ID
U盘           2008-01   18.60         9.00         0.00        wangjing     p004现在要先从t_view_cal表中查询到C_FML的值n_unitprice*n_quantity,然后,作为一个新的字段,从vw_order表中查询出该字段的值。如果采用两个SQL,容易select c_fml  from t_view_cal where c_fml_cde = '折扣价' and c_data_view = 'VW_ORDER'
select (n_unitprice*n_quantity),n_unitprice,n_quantity from vw_order但是,如何把这两个SQL拼接起来呢?

解决方案 »

  1.   

    select (select c_fml  from t_view_cal where c_fml_cde = '折扣价' and c_data_view = 'VW_ORDER' ),n_unitprice,n_quantity from vw_order 
    这样就行啊,,,
    但是你得保证select c_fml  from t_view_cal where c_fml_cde = '折扣价' and c_data_view = 'VW_ORDER' 查出来的值只有一个
      

  2.   

    终于看明白你的意思了,
    你这样通过一般的sql不能实现(值作为列名),必须使用动态sql
    给你写个oracle的函数实现CREATE OR REPLACE FUNCTION F_COLVALUE RETURN VARCHAR2 IS
      V_SQL     VARCHAR2(300); --动态sql
      V_COLNAME VARCHAR2(200);--动态列名
       v_backvlaue VARCHAR2(200);--返回值BEGIN
      SELECT  C_FML  INTO V_COLNAME from t_view_cal where c_fml_cde = '折扣价' and c_data_view = 'VW_ORDER'   V_SQL := ' SELECT '||V_COLNAME||'  from vw_order  ';
    EXECUTE IMMEDIATE  V_SQL  INTO  v_backvlaue ;
    RETURN(v_backvlaue );
    END F_COLVALUE;
    如果不写函数或者存储过程,只能在java里面使用两次查询啦。o(∩_∩)o...哈哈