--测试数据
CREATE TABLE #XS_REP_CLIENTPROD_CHX
(
 C_PTID varchar (16) NULL ,
 C_PTNAME varchar(80)  NULL,
 c_PCID varchar(50)  NULL,
 C_CUSTID varchar (15)  NULL ,
 c_CustName varchar (100) NULL ,
-- N_PRICE  numeric(18, 2) NULL ,
-- N_PRENOINVOICE numeric(18, 3) NULL ,
 N_SALEWEIGHT numeric(18, 3) NULL --,
-- N_INVOICEWEIGHT numeric(18, 3) NULL ,
-- N_NOINVOICE numeric(18, 3) NULL,
-- N_PRENOINVOICE_m  numeric(18, 3) NULL,
-- N_SALEWEIGHT_m numeric(18, 3) NULL ,
-- N_INVOICEWEIGHT_m numeric(18, 3) NULL ,
-- N_NOINVOICE_m numeric(18, 3) NULL
)

insert #XS_REP_CLIENTPROD_CHX
          select '001001','葡萄','0201','0201001','客户1',1
union all select '001001','葡萄','0201','0201002','客户2',2
union all select '001001','苹果','0201','0201001','客户1',3
union all select '001001','苹果','0201','0201002','客户2',4
go

--查询
declare @s varchar(8000)
set @s=''
select @s=@s+',['+C_PTNAME+']=sum(case C_PTNAME when '''
 +C_PTNAME+''' then N_SALEWEIGHT else 0 end)'
from #XS_REP_CLIENTPROD_CHX
group by C_PTNAME
exec('
select c_PCID=case
  when grouping(c_PCID)=1 then ''总计''
  else c_PCID end
 ,C_CUSTID=case
  when grouping(c_PCID)=1 then ''''
  when grouping(C_CUSTID)=1 then ''小计''
  else C_CUSTID end
 ,c_CustName=case
  when grouping(c_CustName)=0 then c_CustName
  else '''' end
 '+@s+'
from #XS_REP_CLIENTPROD_CHX
group by c_PCID,C_CUSTID,c_CustName with rollup
having (grouping(c_PCID)=1 or grouping(C_CUSTID)=1)
 or  grouping(c_CustName)=0
')
go

--删除测试
drop table #XS_REP_CLIENTPROD_CHX

/*--测试结果

c_PCID     C_CUSTID        c_CustName           苹果         葡萄    
---------- --------------- -------------------- ----------- ---------
0201       0201001         客户1                  3.000      1.000
0201       0201002         客户2                  4.000      2.000
0201       小计                                   7.000      3.000
总计                                              7.000      3.000

--*/

/*--搜索某个字符串在那个表的那个字段中

--邹建 2004.10(引用请保留此信息)--*/

/*--调用示例
 
 exec p_search N'张'
--*/
create proc p_search
@str Nvarchar(1000) --要搜索的字符串
as
if @str='' return

declare @s Nvarchar(4000)
create table #t(表名 sysname,字段名 sysname)

declare tb cursor local for
select s='if exists(select 1 from ['+replace(b.name,']',']]')+'] where ['+a.name+'] like N''%'+@str+'%'')
 print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
 and a.xtype in(175,239,99,35,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
 exec(@s)
 fetch next from tb into @s
end
close tb
deallocate tb

/*--测试结果

所在的表及字段: [authors].[au_lname]

--*/

posted on 2005-01-19 09:49  James Wong   阅读(456)  评论(0编辑  收藏  举报