有一表
create table tbda_yg_bx     --员工档案_ 保险
(
    f_ygbm varchar(15)      Not Null,  --员工编码
    f_xh         int                 Not Null,               --序号
    f_xz          int      Not Null default 0,    --险种
    f_bxgs       varchar(30)       Not Null default '',  --保险公司
    f_jffs        int      Not Null default 0,    --缴费方式
    f_bxje float Not Null default 0,--保险金额
    f_bxqx varchar(10)                 Not Null default '',    --保险期限
    f_ksrq    varchar(8)        Not Null default '',  --开始年月
    f_dqrq    varchar(8)        Not Null default '',  --到期日期
    f_bxnr         varchar(1024)    Not Null default '',    --保险内容
    f_bh    varchar(20)        Not Null default '',  --编号
    f_bdh     varchar(20)        Not Null default '',  --保单号
    f_zh varchar(20)        Not Null default '',  --帐号
    Constraint tbda_yg_bx_key Primary Key(f_ygbm,f_xh)
)?1 险种横向展开后,保险公司,开始年月等10个字段的数据如何显示?是不是只能放一个数据值
?2 险种是int类型,其名称又存于另外一个表,需要取得其名称作为列名附
/*险种是这样存放的
create table tbda_sys     --系统档案
(
    f_sysbm       varchar(15)     Not Null,        --系统编码
...
    Constraint tbda_sys_key Primary Key(f_sysbm)
)值 597 ...
   ... ...create table tbda_sys_detail  
(
    f_sysbm       varchar(15)     Not Null,               --档案模块
    f_dabm    int      Not Null,  --档案编码
    f_damc    varchar(60) Not Null,  --档案名称
...
    Constraint tbda_sys_detail_key Primary Key(f_sysbm,f_dabm)
)
值597 1   意外保险 ...
  597 2   工伤保险 ...
  ... ... ...      ...
*/

解决方案 »

  1.   

    create procedure p_rebuildxz 
     as 
     begin 
         if exists(Select name from sysobjects where Name='tbda_yg_bx_c') drop table tbda_yg_bx_c 
         Declare @Sql nvarchar(4000) 
         Set @Sql=N'select f_ygbm' 
         Select @Sql=@Sql+N',max(Case f_xz When '''+f_xz+''' Then f_rq End) As ['+f_xz+']' 
         From (select distinct isnull(xz.f_damc,'') as f_xz from tbda_yg_bx bx left outer join tbda_sys_detail xz  on bx.f_xz=xz.f_dabm and xz.f_sysbm='597') as a 
         set @sql=@Sql+N' into tbda_yg_bx_c From (select bx.f_ygbm,isnull(xz.f_damc,'''') as f_xz,
                          bx.f_ksrq+''-''+bx.f_dqrq as f_rq 
                          from tbda_yg_bx bx 
                          left outer join tbda_sys_detail xz  on bx.f_xz=xz.f_dabm and xz.f_sysbm=''597'') tbda_yg_bx 
                          Group By f_ygbm'
         exec(@sql) 
     end exec p_rebuildxz select * from tbda_yg_bx_c其他字段保险公司,保险内容...依此类推