首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

DVD_01(OK_008 blog:wghao.cnblogs.com)请进,该怎么处理

2012-03-08 
DVD_01(OK_008 blog:wghao.cnblogs.com)请进createtablet_kc--库存表(typevarchar(20),--材料类别mcvarcha

DVD_01(OK_008 blog:wghao.cnblogs.com)请进
create   table   t_kc   --库存表
(
  type   varchar(20),--材料类别  
  mc       varchar(20),--材料名称
  dw       varchar(20),--材料单位
  gg       varchar(20),--材料规格
  sl       int,                 --出入库数量
  dj       decimal(13,2),--单价
  status   char(1),--出入库状态   1为入库     0为出库
  bz       varchar(50),--材料用途
  gydw   varchar(50),   --供应单位
  rq       datetime   --出入库日期
)
insert   into   t_kc   select   '标准件 ', '螺丝 ', '根 ', 'M10 ',100,1, '1 ',null, '供应部门1 ', '2007-6-1 '
insert   into   t_kc   select   '标准件 ', '螺丝 ', '根 ', 'M10 ',100,1.5, '1 ',null, '供应部门2 ', '2007-6-2 '
insert   into   t_kc   select   '标准件 ', '螺丝 ', '根 ', 'M10 ',30,1, '0 ', '车底板 ',null, '2007-6-3 '

insert   into   t_kc   select   '标准件 ', '分泵 ', '无 ', '单 ',10,100, '1 ',null, '供应部门2 ', '2007-6-2 '

insert   into   t_kc   select   '标准件 ', '分泵 ', '无 ', '单 ',10,100, '1 ',null, '供应部门1 ', '2007-6-2 '

insert   into   t_kc   select   '标准件 ', '分泵 ', '无 ', '单 ',10,100, '1 ',null, '供应部门1 ', '2007-6-2 '

create   table   t_bzj_zl_ys     --材料预算表
(
  type   varchar(20),   --材料类别
  name   varchar(20),   --材料名称
  dw       varchar(20),   --材料单位
  gg       varchar(20),   --材料规格
  sl       int,       --使用数量
  dj       decimal(13,2),     --材料单价
  yt       varchar(50)--用途
)
insert   into   t_bzj_zl_ys     select   '标准件 ', '螺丝 ', '根 ', 'M10 ',200,2, '车底板 '
insert   into   t_bzj_zl_ys     select   '标准件 ', '分泵 ', '无 ', '单 ',200,100, '车底板 '
/*
要得到材料采购计划表,按照材料类别,名称,单位,规格进行分组,格式为:

材料类别     材料名称     单位       规格           用途       计划用料数量       采购数量       最后一次入库单价       金额       最后一次供应单位       库存结余数量  
标准件           螺丝             根         M10         车底板             200                   30                           1.5                     45                 供应部门2                 170
标准件
*/


SELECT   IDENTITY(int,1,1)   AS   [id],A.type   AS   材料类别,A.[name]   AS   材料名称,A.dw   AS   单位,A.gg   AS   规格
,A.yt   AS   用途,A.sl   AS   计划用料数量,B.dj   AS   最后一次入库单价  
,A.sl-C.sl   采购数量,   (A.sl-C.sl)*B.dj   AS   金额,B.gydw   AS   最后一次供应单位


,C.sl   库存结余数量
INTO   #T   --把结果些入临时表,为的是去除重复的记录(重复的原因:分泵   三个进货的日期相同导致重复记录)
FROM   t_bzj_zl_ys   AS   A
LEFT   OUTER   JOIN   --最后入库信息
(SELECT   *   FROM   t_kc   AS   A1   WHERE   status=1  
AND   NOT   EXISTS(SELECT   1   FROM   t_kc   AS   B1   WHERE   B1.status=1   AND   B1.type=A1.type   AND   B1.mc=A1.mc   AND   B1.rq> A1.rq))
AS   B   ON   B.type=A.type   AND   A.[name]=B.mc
LEFT   OUTER   JOIN     --统计进出库数量
(SELECT   type,mc,SUM(CASE   status   WHEN   1   THEN   sl   ELSE   -sl   END)   AS   sl  
FROM   t_kc   GROUP   BY   type,mc)
AS   C   ON   C.type=A.type   AND   A.[name]=C.mc

--查询语句
SELECT   *   FROM   #T   AS   A   WHERE   NOT   EXISTS(SELECT   1   FROM   #T   AS   B   WHERE   B.材料类别=A.材料类别   AND   B.材料名称=A.材料名称   AND   B.[id]> A.[ID])
DROP   TABLE   #T


drop   table   t_bzj_zl_ys
drop   table   t_kc

-------------------------------------------
请教一个小问题,怎样把“采购数量”小于等于0的记录不显示出来?

[解决办法]
create table t_kc --库存表
(
type varchar(20),--材料类别
mc varchar(20),--材料名称
dw varchar(20),--材料单位
gg varchar(20),--材料规格
sl int, --出入库数量
dj decimal(13,2),--单价
status char(1),--出入库状态 1为入库 0为出库
bz varchar(50),--材料用途
gydw varchar(50), --供应单位
rq datetime --出入库日期
)
insert into t_kc select '标准件 ', '螺丝 ', '根 ', 'M10 ',100,1, '1 ',null, '供应部门1 ', '2007-6-1 '
insert into t_kc select '标准件 ', '螺丝 ', '根 ', 'M10 ',100,1.5, '1 ',null, '供应部门2 ', '2007-6-2 '
insert into t_kc select '标准件 ', '螺丝 ', '根 ', 'M10 ',30,1, '0 ', '车底板 ',null, '2007-6-3 '

insert into t_kc select '标准件 ', '分泵 ', '无 ', '单 ',10,100, '1 ',null, '供应部门2 ', '2007-6-2 '

insert into t_kc select '标准件 ', '分泵 ', '无 ', '单 ',10,100, '1 ',null, '供应部门1 ', '2007-6-2 '

insert into t_kc select '标准件 ', '分泵 ', '无 ', '单 ',10,100, '1 ',null, '供应部门1 ', '2007-6-2 '

create table t_bzj_zl_ys --材料预算表
(
type varchar(20), --材料类别
name varchar(20), --材料名称
dw varchar(20), --材料单位
gg varchar(20), --材料规格
sl int, --使用数量
dj decimal(13,2), --材料单价
yt varchar(50)--用途
)
insert into t_bzj_zl_ys select '标准件 ', '螺丝 ', '根 ', 'M10 ',200,2, '车底板 '
insert into t_bzj_zl_ys select '标准件 ', '分泵 ', '无 ', '单 ',200,100, '车底板 '
/*
要得到材料采购计划表,按照材料类别,名称,单位,规格进行分组,格式为:

材料类别 材料名称 单位 规格 用途 计划用料数量 采购数量 最后一次入库单价 金额 最后一次供应单位 库存结余数量
标准件 螺丝 根 M10 车底板 200 30 1.5 45 供应部门2 170
标准件
*/


SELECT IDENTITY(int,1,1) AS [id],A.type AS 材料类别,A.[name] AS 材料名称,A.dw AS 单位,A.gg AS 规格
,A.yt AS 用途,A.sl AS 计划用料数量,B.dj AS 最后一次入库单价
,A.sl-C.sl 采购数量, (A.sl-C.sl)*B.dj AS 金额,B.gydw AS 最后一次供应单位
,C.sl 库存结余数量
INTO #T --把结果些入临时表,为的是去除重复的记录(重复的原因:分泵 三个进货的日期相同导致重复记录)
FROM t_bzj_zl_ys AS A


LEFT OUTER JOIN --最后入库信息
(SELECT * FROM t_kc AS A1 WHERE status=1
AND NOT EXISTS(SELECT 1 FROM t_kc AS B1 WHERE B1.status=1 AND B1.type=A1.type AND B1.mc=A1.mc AND B1.rq> A1.rq))
AS B ON B.type=A.type AND A.[name]=B.mc
LEFT OUTER JOIN --统计进出库数量
(SELECT type,mc,SUM(CASE status WHEN 1 THEN sl ELSE -sl END) AS sl
FROM t_kc GROUP BY type,mc)
AS C ON C.type=A.type AND A.[name]=C.mc
Where A.sl-C.sl > 0 --------------加上條件

--查询语句
SELECT * FROM #T AS A WHERE NOT EXISTS(SELECT 1 FROM #T AS B WHERE B.材料类别=A.材料类别 AND B.材料名称=A.材料名称 AND B.[id]> A.[ID])
DROP TABLE #T


drop table t_bzj_zl_ys
drop table t_kc

[解决办法]
最後的查詢語句
SELECT * FROM #T AS A WHERE NOT EXISTS(SELECT 1 FROM #T AS B WHERE B.材料类别=A.材料类别 AND B.材料名称=A.材料名称 AND B.[id]> A.[ID]) and A.采购数量 > 0

热点排行