昨晚做了一个自我感觉挺牛的报表(嘿嘿,可能是因为第一次用N-UP格式,所以才觉得难)
一客户要做奖券打印
一开始,我已经用LABEL风格的数据窗口做好了,很美观,GOOD! : )
可是一给客户,反映众多问题.
[如下:]
     2.有工龄为0月的人员
      3.工龄为2月或2年以上请在英文"YEAR"和"MONTH"后面加上"S"
      4.请增设一个工龄计算截止日期
      5.  导出后不能打印
第五点最为头痛.
打印就打印,怎么又要导出?
哎,客户是魔鬼,也是上帝嘛~~~
怎么也得实现.
公司的输出系统不支持LABEL格式
试了一下,N-UP格式是支持的.
找不到相关例子和相关经验的人
试了半天,我靠!N-UP格式不支持每个栏分别使用计算字段.
气死偶也@@(
没办法也得想啊.....
想啊想啊想啊想.....
终于想到了一个很妙的办法,用SQL直接拼,哈哈哈.....
真是天才......
根据客户的多种需求以及我刚接触MSSQL,好不容易才把语句拼好了[如下:]


 SELECT h_emp_mstr.emp_in_date,          
         h_emp_mstr.emp_state,  
         h_emp_mstr.emp_level,  
         h_emp_mstr.emp_hire_type,  
         h_emp_mstr.emp_id,  
         h_emp_mstr.cc_code,  
     case 
     WHEN  datediff(month,h_emp_mstr.emp_in_date,getdate())<= 1 THEN '1 MONTH'
         WHEN  datediff(month,h_emp_mstr.emp_in_date,getdate()) < 12 THEN  cast(datediff(month,h_emp_mstr.emp_in_date,getdate()) as varchar)+'MONTHS'   
         WHEN datediff(month,h_emp_mstr.emp_in_date,getdate())>= 12 and  datediff(month,h_emp_mstr.emp_in_date,getdate()) < 24 THEN '1 YEAR'
         ELSE cast(datediff(YEAR,h_emp_mstr.emp_in_date,getdate()) as varchar) + 'YEARS'
         END AS work_age,
   getdate() adt_date,
         rtrim(h_emp_mstr.emp_name) + ltrim(isnull(h_emp_mstr.emp_name_en,'')) as temp_name,  
         rtrim(cc_mstr.cc_desc) + ltrim(isnull(cc_mstr.cc_desc_en,'')) as temp_dept
    FROM h_emp_mstr,  
         cc_mstr  
 WHERE ((h_emp_mstr.cc_code = cc_mstr.cc_code)and
   ( h_emp_mstr.emp_id >= :as_empid1 ) AND 
         ( h_emp_mstr.emp_id <= :as_empid2 ) AND 
         ( cc_mstr.cc_level >= :as_level1 ) AND 
         ( cc_mstr.cc_level <= :as_level2 ) AND 
         ( h_emp_mstr.emp_state = :as_state )  and
         h_emp_mstr.emp_hire_type like :as_com+'%')
连续战斗了一天,累死了,不过,还是很有成就感的,嘿嘿.....
posted on 2006-12-19 10:28  阿波罗  阅读(1509)  评论(0)    收藏  举报