Input Parameter:
1. Group Bill Account Number
2. Group Bill Issue Date (yyyy/mm/dd)
**************************
要显示的字段:
Report Field          Database Field
Group Bill Account Code Grp_bill_acct.grp_bill_code
Group Bill Account Number Ind_bill_dtl.grp_bill_acct_no
Group Bill Description Grp_bill_acct.grp_bill_desc
Group Bill Issue date Ind_bill_dtl.grp_bill_issue_date
Group Bill Due Date Grp_bill_dtl.bill_due_date
Payment Status          Grp_bill_dtl.paid_status
Service Account Number Ind_bill_dtl.svr_acct_no
Supply Address Svr_acct.acct_addr1,Svr_acct.acct_addr2,Svr_acct.acct_addr3,Svr_acct.acct_addr4
Service Account Bill Reading Date Ind_bill_dtl.bill_rdg_date
Amount                         Ind_bill_dtl.chrg_amt OR Ind_bill_dtl.paid_amt
Res                        Deleted Account / No Such Account / Unbilled
***************************************
Res fill will depend on these situations:·Deleted Account – Depend on svr_acct.disable = “Y”
·No Such Account – Depend on ind_bill_acct has the svr_acct_no and svr_acct have not svr_acct_no
·Unbilled – Depend on svr_acct has the svr_acct_no and ind_bill_acct has not svr_acct_no
************************************四个表的设计如下:
CREATE TABLE [dbo].[grp_bill_acct] (
[grp_bill_acct_no] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[grp_bill_code] [char] (3) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[wpocs_filename_no] [char] (2) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[grp_bill_desc] [nvarchar] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[disable] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[expired_date] [datetime] NULL ,
[create_date] [datetime] NULL ,
[create_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[modify_date] [datetime] NULL ,
[modify_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL 
) ON [PRIMARY]
GOCREATE TABLE [dbo].[ind_bill_dtl] (
[uid] [int] NOT NULL ,
[svr_acct_no] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[bill_rdg_date] [datetime] NOT NULL ,
[bill_from_date] [datetime] NULL ,
[grp_bill_acct_no] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[grp_bill_issue_date] [datetime] NULL ,
[chrg_amt] [numeric](11, 2) NULL ,
[cert_amt] [numeric](11, 2) NULL ,
[paid_amt] [numeric](11, 2) NULL ,
[cert_status] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[paid_status] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[match_status] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[res] [text] COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[outstd_status] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[outstd_res] [nvarchar] (50) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[create_date] [datetime] NULL ,
[create_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[modify_date] [datetime] NULL ,
[modify_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
CREATE TABLE [dbo].[officer] (
[officer_post] [char] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[officer_name] [nvarchar] (40) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[tel] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[fax] [varchar] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[email] [varchar] (30) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[disable] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[expired_date] [datetime] NULL ,
[create_date] [datetime] NULL ,
[create_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[modify_date] [datetime] NULL ,
[modify_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL 
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[svr_acct] (
[svr_acct_no] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[svr_acct_name] [nvarchar] (40) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[grp_bill_acct_no] [char] (10) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[tariff] [char] (12) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[acct_addr1] [nvarchar] (40) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[acct_addr2] [nvarchar] (40) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[acct_addr3] [nvarchar] (40) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[acct_addr4] [nvarchar] (40) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[acct_addr5] [nvarchar] (40) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[certifier] [char] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[contactor] [char] (20) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[disable] [char] (1) COLLATE Chinese_Taiwan_Stroke_CI_AS NOT NULL ,
[expired_date] [datetime] NULL ,
[create_date] [datetime] NULL ,
[create_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL ,
[modify_date] [datetime] NULL ,
[modify_by] [char] (15) COLLATE Chinese_Taiwan_Stroke_CI_AS NULL 
) ON [PRIMARY]
GO***************************************
麻烦各位大哥可以帮帮小弟,小弟将感激不尽!

解决方案 »

  1.   

    declare @a varchar(100),@b varchar(100),@列名1 varchar(100),@列名2 varchar(100)exec('select * from 表1 a join 表2 b on a.关联列=b.关联列 join 表3 c on a.关联列=c.关联列 join 表4 d on c.关联列=d.关联列 where '+@列名1+'='''+@a+''' and '+@列名2+'='''+@b+'''')
      

  2.   

    大力哥哥,先谢谢你的回答。以下是我写的存储过程,可以编译通过,但在生成报表的时候,
    只是出现表的字段名而没有数据,麻烦你帮我看看代码有什么错误的地方。
    create procedure test3333
    @grp_no char(10),
    @year varchar(4),
    @month varchar(2),
    @day varchar(2)
    asdeclare @p_no char(10)
    declare @ed varchar(10)
    declare @edate1 datetime
    declare @edate2 datetime
    create table #result
    (
     r_grp_bill_acct_code  varchar(3),
     r_grp_bill_acct_no    varchar(10),
     r_grp_bill_acct_desc  varchar(40),
     r_grp_bill_acct_issue_date  datetime,
     r_svr_acct_no varchar(10),
     r_svr_acct_addr1 varchar(40),
     r_svr_acct_addr2 varchar(40),
     r_svr_acct_addr3 varchar(40),
     r_svr_acct_addr4 varchar(40),
     r_officer_name varchar(40),
     r_res TEXT
    )
    set @ed = ''
    set @ed = @ed + @day
    set @ed = @ed + '/'+@month
    set @ed = @ed+ '/' + @year
    set @edate2= (cast(@ed as datetime))
    set @edate1 = dateadd(m,-1,@edate2)select  @p_no=ind_bill_dtl.grp_bill_acct_no
    from ind_bill_dtl
    where ind_bill_dtl.grp_bill_issue_date=@edate1if @p_no=@grp_no
    begin
    insert into #result select grp_bill_acct.grp_bill_code,ind_bill_dtl.grp_bill_acct_no,grp_bill_acct.grp_bill_desc,
    ind_bill_dtl.grp_bill_issue_date,ind_bill_dtl.svr_acct_no,
    svr_acct.acct_addr1,svr_acct.acct_addr2,svr_acct.acct_addr3,svr_acct.acct_addr4,
    officer.officer_name,res
    from grp_bill_acct,ind_bill_dtl,svr_acct,officer
    end
    select * from #result
    go
      

  3.   

    create procedure test3333
    @grp_no char(10),
    @year varchar(4),
    @month varchar(2),
    @day varchar(2)
    asdeclare @p_no char(10)
    declare @ed varchar(10)
    declare @edate1 datetime
    declare @edate2 datetime
    create table #result
    (
     r_grp_bill_acct_code  varchar(3),
     r_grp_bill_acct_no    varchar(10),
     r_grp_bill_acct_desc  varchar(40),
     r_grp_bill_acct_issue_date  datetime,
     r_svr_acct_no varchar(10),
     r_svr_acct_addr1 varchar(40),
     r_svr_acct_addr2 varchar(40),
     r_svr_acct_addr3 varchar(40),
     r_svr_acct_addr4 varchar(40),
     r_officer_name varchar(40),
     r_res TEXT
    )
    set nocount on --add 
    set @ed = ''
    set @ed = @ed + @day
    set @ed = @ed + '/'+@month
    set @ed = @ed+ '/' + @year
    set @edate2= (cast(@ed as datetime))
    set @edate1 = dateadd(m,-1,@edate2)select  @p_no=ind_bill_dtl.grp_bill_acct_no
    from ind_bill_dtl
    where ind_bill_dtl.grp_bill_issue_date=@edate1if @p_no=@grp_no
    begin
    insert into #result select grp_bill_acct.grp_bill_code,ind_bill_dtl.grp_bill_acct_no,grp_bill_acct.grp_bill_desc,
    ind_bill_dtl.grp_bill_issue_date,ind_bill_dtl.svr_acct_no,
    svr_acct.acct_addr1,svr_acct.acct_addr2,svr_acct.acct_addr3,svr_acct.acct_addr4,
    officer.officer_name,res
    from grp_bill_acct,ind_bill_dtl,svr_acct,officer where --加上表间关系
    end
    select * from #result
    drop table #result-- 最好加上
    go
      

  4.   

    to sdhdy(大江东去...) :这一句set nocount on --add是什么意思啊,
    from grp_bill_acct,ind_bill_dtl,svr_acct,officer where --加上表间关系:这我也试过加上他们之间的关系,可以结果还是没有数据出现啊,麻烦帮我再看看!!!谢谢!!!
      

  5.   

    使返回的结果中不包含有关受 Transact-SQL 语句影响的行数的信息。语法
    SET NOCOUNT { ON | OFF }注释
    当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。当 SET NOCOUNT 为 OFF 时,返回计数。即使当 SET NOCOUNT 为 ON 时,也更新 @@ROWCOUNT 函数。当 SET NOCOUNT 为 ON 时,将不给客户端发送存储过程中的每个语句的 DONE_IN_PROC 信息。当使用 Microsoft® SQL Server™ 提供的实用工具执行查询时,在 Transact-SQL 语句(如 SELECT、INSERT、UPDATE 和 DELETE)结束时将不会在查询结果中显示"nn rows affected"。如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显著提高性能。SET NOCOUNT 设置是在执行或运行时设置,而不是在分析时设置。
      

  6.   

    不用建立4个临时表,没必要。用你原来那样就可以。
    把以下代码放到查询分析起中
    把那几个参数赋上值,执行一下,看看有没有数据,如没有的话就是你的查询语句有问题
    declare @p_no char(10)
    declare @ed varchar(10)
    declare @edate1 datetime
    declare @edate2 datetime
    --如:
    set @grp_no ='asdf'
    set @year=2003
    set @month =7
    set @day =23
    create table #result
    (
     r_grp_bill_acct_code  varchar(3),
     r_grp_bill_acct_no    varchar(10),
     r_grp_bill_acct_desc  varchar(40),
     r_grp_bill_acct_issue_date  datetime,
     r_svr_acct_no varchar(10),
     r_svr_acct_addr1 varchar(40),
     r_svr_acct_addr2 varchar(40),
     r_svr_acct_addr3 varchar(40),
     r_svr_acct_addr4 varchar(40),
     r_officer_name varchar(40),
     r_res TEXT
    )
    set nocount on --add 
    set @ed = ''
    set @ed = @ed + @day
    set @ed = @ed + '/'+@month
    set @ed = @ed+ '/' + @year
    set @edate2= (cast(@ed as datetime))
    set @edate1 = dateadd(m,-1,@edate2)select  @p_no=ind_bill_dtl.grp_bill_acct_no
    from ind_bill_dtl
    where ind_bill_dtl.grp_bill_issue_date=@edate1if @p_no=@grp_no
    begin
    insert into #result select grp_bill_acct.grp_bill_code,ind_bill_dtl.grp_bill_acct_no,grp_bill_acct.grp_bill_desc,
    ind_bill_dtl.grp_bill_issue_date,ind_bill_dtl.svr_acct_no,
    svr_acct.acct_addr1,svr_acct.acct_addr2,svr_acct.acct_addr3,svr_acct.acct_addr4,
    officer.officer_name,res
    from grp_bill_acct,ind_bill_dtl,svr_acct,officer where --加上表间关系
    end
    select * from #result
    drop table #result-- 最好加上