如何在这个存储过程中加入一个字段
ALTER PROCEDURE [dbo].[sp_clkc_jxctj]
@StarDate varchar(30) ,
@EndDate varchar(30),
@ckid int
AS
--LastUpdate:2012.08.24 by tonky
DECLARE @StarDate1 varchar(20),
@EndDate1 varchar(20),
@StarDate2 varchar(20),
@EndDate2 varchar(20),
@oldym varchar(20),
@StarDate_1 datetime,
@TempDate datetime,
@yy int,
@mm int,
@dd int,
@flag int ,
@TJYM varchar(10),
@Billtype int
select @StarDate= convert(varchar(10), cast(@StarDate as datetime) ,120)
select @EndDate= convert(varchar(10), cast(@EndDate as datetime) ,120)
select @Billtype=1,@flag=0
select @StarDate_1=cast(@StarDate as datetime)
select @yy=DATEPART(year,@StarDate_1)
select @mm=DATEPART(month,@StarDate_1)
select @dd=DATEPART(day,@StarDate_1)
select @StarDate1=cast(@yy as varchar(4))+'-'+cast(@mm as varchar(2))+'-'+'01'
select @TempDate=cast(@StarDate1 as datetime)-1
select @oldym=DATEPART(year,@TempDate)*100 +DATEPART(month,@TempDate) -- 年份必须乘以100
select @TempDate=cast(cast(@StarDate as datetime)-1 as varchar(20))
select @EndDate1=cast(DATEPART(year,@TempDate) as varchar(4))+'-'+cast(DATEPART(month,@TempDate) as varchar(4))+'-'+cast(DATEPART(day,@TempDate) as varchar(4))
select @StarDate2=@StarDate
select @EndDate2=@EndDate
SELECT @TJYM=TJYM, --=201107
@StarDate1=BeginDate
FROM tkPeriodCo
WHERE Companyid=0 and PeriodID=2 and ckid=@ckid and
@StarDate between BeginDate and EndDate
--求上一个期间号
select @TempDate=DATEADD(month, -1, @StarDate)
SELECT @oldym=TJYM --=201106
FROM tkPeriodCo
WHERE Companyid=0 and PeriodID=2 and ckid=@ckid and
@TempDate between BeginDate and EndDate
/*
SELECT @nstate=nstate,
@Bdate=Begindate,
@Edate=Enddate
FROM tkPeriodCo
where Companyid=0 and PeriodID=2 and ckid=@ckid and TJYM=@TJYM
*/
-- select @oldym=DATEPART(yyyy,@StarDate_1)
--清空中间表
-- DELETE clkc_jxctj
--建临时表
CREATE TABLE #Clkc_jxctj_cl
(
goodsid int,
Billtype int,
ddspec varchar(100),
ysid int,
orli varchar(100),
ckid int,
ckkw varchar(100),
batno varchar(100),
lccd numeric(18,4),
lchd numeric(18,4),
qcQty numeric(18,4),
qcAmt money,
qclcwt numeric(18,4),
rkQty numeric(18,4),
rkAmt money,
rklcwt numeric(18,4),
tjQty numeric(18,4),
tjAmt money,
tjlcwt numeric(18,4),
ckQty numeric(18,4),
ckAmt money,
cklcwt numeric(18,4),
jcQty numeric(18,4),
jcAmt money,
jclcwt numeric(18,4)
)
declare @SQL VarChar(2000)
/*增加上月结存数量到中间表,作为期初数*/
INSERT INTO #Clkc_jxctj_cl(goodsid,Billtype,ddspec,ysid,orli,ckid,ckkw,batno,lccd,lchd,
qcQty,qcAmt,qclcwt, rkQty, rkAmt,rklcwt, tjQty, tjAmt,tjlcwt, ckQty, ckAmt,cklcwt,jcQty, jcAmt,jclcwt)
SELECT goodsid,Billtype,ddspec,ysid,orli,ckid,ckkw,batno,lccd,lchd,
qty AS qcQty,
amt AS qcAmt,
lcwt AS qclcwt,
0 as rkQty, 0 as rkAmt,0 as rklcwt,
0 as tjQty, 0 as tjAmt,0 as tjlcwt,
0 as ckQty, 0 as ckAmt,0 as cklcwt,
0 as jcQty, 0 as jcAmt,0 as jclcwt
FROM clkc_jcit
WHERE (tjym=@oldym )and (ckid=@ckid)
and (Billtype=@Billtype)
INSERT INTO #Clkc_jxctj_cl(goodsid,Billtype,ddspec,ysid,orli,ckid,ckkw,batno,lccd,lchd,
qcQty,qcAmt,qclcwt, rkQty, rkAmt,rklcwt, tjQty, tjAmt,tjlcwt, ckQty, ckAmt,cklcwt,jcQty, jcAmt,jclcwt)
SELECT goodsid,Billtype,ddspec,ysid,orli,ckid,ckkw,batno,lccd,lchd,
(rkQty + tjQty - ckQty) AS qcQty,
(rkAmt + tjAmt - ckAmt) AS qcAmt,
(rklcwt + tjlcwt - cklcwt) AS qcAmt,
0 as rkQty, 0 as rkAmt,0 as rklcwt,
0 as tjQty, 0 as tjAmt,0 as tjlcwt,
0 as ckQty, 0 as ckAmt,0 as cklcwt,
0 as jcQty, 0 as jcAmt,0 as jclcwt
FROM vClkc_jxctjmx
WHERE (dzrq >=@StarDate1 )and(dzrq<=@EndDate1) and (ckid=@ckid)and (Billtype=@Billtype)
--增加查询日期段内进出明细到中间表
INSERT INTO #Clkc_jxctj_cl(goodsid,Billtype,ddspec,ysid,orli,ckid,ckkw,batno,lccd,lchd,
qcQty,qcAmt,qclcwt, rkQty, rkAmt,rklcwt, tjQty, tjAmt,tjlcwt, ckQty, ckAmt,cklcwt,jcQty, jcAmt,jclcwt)
SELECT goodsid,Billtype,ddspec,ysid,orli,ckid,ckkw,batno,lccd,lchd,
0 as qcQty, 0 as qcAmt,0 as qclcwt,
rkQty, rkAmt,rklcwt,
tjQty, tjAmt,tjlcwt,
ckQty, ckAmt,cklcwt,
0 as jcQty, 0 as jcAmt,0 as jclcwt
FROM vClkc_jxctjmx
WHERE (dzrq between @StarDate2 and @EndDate2) and (ckid=@ckid)and (Billtype=@Billtype)
--1.按单据类别+仓库+品名
--2.按仓库+品名
--3.按品名
--4.按大类
--5.按中类
IF @flag=0 --
BEGIN
SELECT A.ckid,A.goodsid,B.goodsdm, B.goodsmc,B.spec, D.ckName, B.unit, C.lbName0, C.lbName1,
C.lbName2, A.ddspec, A.batno,A.ckkw,A.orli,A.lccd,A.lchd,
sum(A.qcQty) as qcQty, sum(A.qcAmt) as qcAmt, sum(A.qclcwt) as qclcwt,
Round(CASE sum(A.qcQty) WHEN 0 THEN 0 ELSE sum(A.qcAmt)/ sum(A.qcQty) END,2) AS qcprice,
sum(A.rkQty) as rkQty, sum(A.rkAmt) as rkAmt, sum(A.rklcwt) as rklcwt,
sum(A.tjQty) as tjQty, sum(A.tjAmt) as tjAmt,sum(A.tjlcwt) as tjlcwt,
sum(A.ckQty) as ckQty, sum(A.ckAmt) as ckAmt,sum(A.cklcwt) as cklcwt,
sum(A.qcQty+A.rkQty+A.tjQty-A.ckQty) as jcQty,
sum(A.qcAmt+A.rkAmt+A.tjAmt-A.ckAmt) as jcAmt,
sum(A.qclcwt+A.rklcwt+A.tjlcwt-A.cklcwt) as jclcwt,
Round(CASE sum(A.qcQty+A.rkQty+A.tjQty-A.ckQty) WHEN 0 THEN 0 ELSE sum(A.qcAmt+A.rkAmt+A.tjAmt-A.ckAmt)/ sum(A.qcQty+A.rkQty+A.tjQty-A.ckQty) END,2) AS jcprice
FROM #Clkc_jxctj_cl A left outer join zd_goods B on A.goodsid=B.goodsid
left outer join zd_goodslb C on B.goodslbid=C.goodslbid
left outer join zd_ck D on A.ckid=D.ckid
left outer join lyzd_lcys E on A.ysid=E.ysid
GROUP BY A.ckid,A.goodsid,B.goodsdm, B.goodsmc,B.spec, D.ckName, B.unit, C.lbName0, C.lbName1,
C.lbName2, A.ddspec,A.batno,A.ckkw,A.orli,A.lccd,A.lchd
HAVING not(sum(A.qcQty)=0 and sum(A.rkQty)=0 and
sum(A.tjQty)=0 and sum(A.ckQty)=0 and sum(A.jcQty)=0 and
sum(A.qcAmt)=0 and sum(A.rkAmt)=0 and
sum(A.tjAmt)=0 and sum(A.ckAmt)=0 and sum(A.jcAmt)=0 and
sum(A.qclcwt)=0 and sum(A.rklcwt)=0 and
sum(A.tjlcwt)=0 and sum(A.cklcwt)=0 and sum(A.jclcwt)=0 )
ORDER BY D.ckName,B.goodsdm
END
--删除临时表
Drop TABLE #Clkc_jxctj_cl
要加的表名:lyzd_lcxh 主键:xhid 字段:xhdm
...全文
相关推荐
掌握SQL Server存储过程的命名标准
**可选字段名**: 当存储过程根据某个特定字段进行筛选时,可以在表名之后加入该字段名。
高效的分页存储过程.txt
#### 描述:存储过程与页面调用示例- **存储过程定义**: - `CREATE PROCEDURE search_sp`:定义一个名为`search_sp`的存储过程。
,sql2005万能分页存储过程
- **错误处理**: 在存储过程中加入了错误处理机制,当输入的表名无效时会抛出异常。
Oracle通用数据库存储过程代码--高效分页存储过程
### 使用示例为了更好地理解和使用这个存储过程,我们可以构造一个简单的示例:假设有一个名为`Employees`的表,我们需要查询第2页的数据,每页显示5条记录,按照`HireDate`字段降序排列,
SQL通用存储过程分页,支持多表联合
**优化与指导**: - 虽然这个存储过程可以满足基本的分页需求,但为了提高查询效率,可以考虑加入索引,尤其是在`@OrderfldName`字段上,以加速排序和过滤操作。


其他数据库
