当前位置: 代码迷 >> Sql Server >> 连开三贴,解决! 分全送
  详细解决方案

连开三贴,解决! 分全送

热度:20   发布时间:2016-04-24 10:56:17.0
连开3贴,解决!! 分全送
(sql2000环境)如下三个表拷贝后可以直接创建的:
初学者,求怎样写传入参数,这里的sql都能直接执行的,不输入参数也能只能执行,求最终有执行结果的!
--创建销售表
CREATE TABLE [Y_liushui] (
[id] [int] IDENTITY (1, 1) NOT NULL , 
[jinhuodanwei] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL , 
[cpid] [int] NULL ,
[yppinming] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL , 
[ypjine] [decimal](18, 4) NULL , 
[shuliang] [decimal](18, 4) NOT NULL ,
[caozuobiaoshi] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[caozuoriqi] [datetime] NULL CONSTRAINT [DF_Y_liushui1_caozuoriqi] DEFAULT (getdate()),
CONSTRAINT [PK_YP_liushui1] PRIMARY KEY  CLUSTERED 
(
[id]
)  ON [PRIMARY] 
) ON [PRIMARY]
GO
id jinhuodanwei cpid yppinming ypjine shuliang caozuobiaoshi caozuoriqi
1 大兴店 1 香蕉 10 2 产品销售 2014-04-05 10:01:01
2 大兴店 1 香蕉 5 1 产品销售 2014-04-05 10:01:01

--创建产品表 
CREATE TABLE [Y_baseinfo] (
[id] [int] IDENTITY (1, 1) NOT NULL , 
[cpid] [int] NULL ,
[yppinming] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL  
CONSTRAINT [PK_Y_baseinfo] PRIMARY KEY  CLUSTERED 
(
[id]
)  ON [PRIMARY] 
) ON [PRIMARY]
GO
id cpid yppinming
1 1 香蕉
2 2 苹果

--创建客户表
CREATE TABLE [Y_xskehu] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[jhdanwei] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Y_xskehu_jhdanwei] DEFAULT (''),
[diqu] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL CONSTRAINT [DF_Y_xskehu_diqu] DEFAULT ('')  
CONSTRAINT [PK_miye_jinhuokehu] PRIMARY KEY  CLUSTERED 
(
[id]
)  ON [PRIMARY] 
) ON [PRIMARY]
GO
id jhdanwei diqu
1 大兴店 北京
2 东直店 上海

-----------------以下是SQL查询过程---------------
问题: 如何用存储过程的方式,将下面的红字部分用给定的传入参数来代替?
diqu like '%%' and jhdanwei like '%%'  分别传入@diqu、@jhdanwei,''2014-01-01'' 与 ''2014-05-01''分别传入日期1、日期2,请问该怎么写,要显示运行结果的sql

IF EXISTS (SELECT name FROM sysobjects
         WHERE name = 'jieguo' AND type = 'P')
   DROP PROCEDURE jieguo
go
IF EXISTS(SELECT NAME FROM sysobjects AS o WHERE NAME = 'T_jiamengdiantongji') 
    DROP TABLE T_jiamengdiantongji  
GO

--create procedure jieguo
--@diqu varchar(50),
--@jhdanwei varchar(50) 
--@日期1 datetime(),
--@日期2 datetime()
--as
DECLARE @sql VARCHAR(8000)  
DECLARE @str VARCHAR(8000)  
SELECT @sql = ISNULL(@sql , '') + N' sum(case when jhdanwei = N''' + jhdanwei + ''' then shuliang else 0 end) as [' +jhdanwei+N'|数量]' 
+N' , sum(case when jhdanwei = N''' + jhdanwei + N''' then ypjine else 0 end) as ['+jhdanwei+N'|金额]'+ N',' FROM (select distinct jhdanwei from Y_xskehu where diqu like '%%' and jhdanwei like '%%') t   
SET @sql = 'SELECT y_baseinfo.cpid , y_baseinfo.yppinming,'+ left(@sql , LEN(@sql) - 1 ) + N', 
ISNULL(sum(shuliang),0) as [合计|数量],
ISNULL(sum(ypjine),0) as [合计|金额]  
from (select cpid,yppinming,jinhuodanwei as jhdanwei,shuliang,ypjine from y_liushui where caozuobiaoshi<>''产品入库'' and convert(varchar(100),caozuoriqi,23)>=''2014-01-01'' and convert(varchar(100),caozuoriqi,23)<=''2014-05-01'') t  
right join y_baseinfo on t.cpid = y_baseinfo.cpid group by y_baseinfo.cpid,y_baseinfo.yppinming ' 
--EXEC (@sql)

set @str= 'select * into T_jiamengdiantongji from ('+@sql+') a ' 
exec(@str) 
select * from T_jiamengdiantongji 
go

--EXECUTE  jieguo '北京1','大兴店','2014-04-01','2014-05-01'

------解决方案--------------------
上面那个帖子 连续3次回复了 不能继续回复~~~ 回复这里
改成这样  那个T_jiamengdiantongji?表没有用 执行一次调用多次

create procedure jieguo
@diqu varchar(50) =NULL,
@jhdanwei varchar(50) =NULL, 
@日期1 datetime =NULL,
@日期2 datetime =NULL
AS
BEGIN
DECLARE @sql VARCHAR(8000)  
DECLARE @str VARCHAR(8000)  
SELECT @sql = ISNULL(@sql , '') 
+ N' sum(case when jhdanwei = N''' + jhdanwei + ''' then shuliang 
  相关解决方案