这样的解发器如何编写:有一个加工项目表,表名为:A
结构如下:
加工编号 项目明细
1 染色
2 定型
3 烧毛还有一个客户加工项目的价格表,表名为:B
结构如下:
客户编号 加工编号 价格
A01 1 1.30
A01 2 2.00
A01 3 1.10
A02 1 3
A02 2 4
A02 3 2下单时,程序是用一个字符字段,记录加工项目明细的
比如:要染色、烧毛,程序就
加工单主表C
主表编号 编户编号 日期 客户编号
001 A01 2009-11-1 A01加工明细表D
明细表编号 主表编号 产品 加工项目
001 001 全棉布 染色;烧毛我的业务:客人A01 的全棉布,加工了染色和烧毛两项,单价合计是多少?根据上面的表的生成下面的出来
客户编号 加工编号 加工项目明细 单价
A01 1 染色 1.3
A01 3 烧毛 1.1
究竟触发器怎样写啊?要在SQL2000下写解器完成(在加工单保存时解发完成)
结构如下:
加工编号 项目明细
1 染色
2 定型
3 烧毛还有一个客户加工项目的价格表,表名为:B
结构如下:
客户编号 加工编号 价格
A01 1 1.30
A01 2 2.00
A01 3 1.10
A02 1 3
A02 2 4
A02 3 2下单时,程序是用一个字符字段,记录加工项目明细的
比如:要染色、烧毛,程序就
加工单主表C
主表编号 编户编号 日期 客户编号
001 A01 2009-11-1 A01加工明细表D
明细表编号 主表编号 产品 加工项目
001 001 全棉布 染色;烧毛我的业务:客人A01 的全棉布,加工了染色和烧毛两项,单价合计是多少?根据上面的表的生成下面的出来
客户编号 加工编号 加工项目明细 单价
A01 1 染色 1.3
A01 3 烧毛 1.1
究竟触发器怎样写啊?要在SQL2000下写解器完成(在加工单保存时解发完成)
http://blog.csdn.net/fredrickhu/archive/2009/10/21/4708906.aspx
参考着做吧
if object_id('[T]') is not null drop table [T]
go
create table [T]([col1] varchar(50),[col2] varchar(50),[col3] varchar(50),[col4] varchar(50))
insert [T]
select '001','001','全棉布','染色;烧毛 '
--------------开始查询--------------------------Select
a.Col1,COL2,
a.col3, COl4=substring(a.Col4,C.number,charindex(';',a.Col4+';',C.number)-C.number)
FROM T A
JOIN master..spt_values C ON C.type='p' and substring(';'+a.COl4,C.number,1)=';'
(所影响的行数为 1 行)Col1 COL2 col3 COl4
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------
001 001 全棉布 染色
001 001 全棉布 烧毛 (所影响的行数为 2 行)拆分这样吧,后面自己连接
Insert into A Select
1 ,'染色' union all select
2 ,'定型' union all select
3 ,'烧毛'
go
create table B(客户编号 nvarchar(10),加工编号 int, 价格 decimal(18,2))
insert into B Select
'A01', 1, 1.30 union all select
'A01', 2, 2.00 union all select
'A01', 3, 1.10 union all select
'A02', 1, 3 union all select
'A02', 2, 4 union all select
'A02', 3, 2
go
Create Table C(主表编号 nvarchar(10),客户编号 nvarchar(10), 日期 datetime,)
Create Table D(明细表编号 nvarchar(10), 主表编号 nvarchar(10), 产品 nvarchar(10), 加工项目 nvarchar(100))insert into C select
'001','A01','2009-11-1'
insert into D select
'001','001','全棉布','染色;烧毛'
Select C.主表编号,A.加工编号,A.项目明细,B.价格
From D inner join A On CharIndex(A.项目明细,D.加工项目)>0
inner join C On D.主表编号=C.主表编号
inner join B on B.加工编号=A.加工编号 and B.客户编号=C.客户编号
/*主表编号 加工编号 项目明细 价格
---------- ----------- ---------- ---------------------------------------
001 1 染色 1.30
001 3 烧毛 1.10(2 行受影响)
*/Select 主表编号,Sum(价格)
From
(Select C.主表编号,A.加工编号,A.项目明细,B.价格
From D inner join A On CharIndex(A.项目明细,D.加工项目)>0
inner join C On D.主表编号=C.主表编号
inner join B on B.加工编号=A.加工编号 and B.客户编号=C.客户编号) V
Group By 主表编号/*主表编号
---------- ---------------------------------------
001 2.40(1 行受影响)
*/
Insert into A Select
1 ,'染色' union all select
2 ,'定型' union all select
3 ,'烧毛'
go
create table B(客户编号 nvarchar(10),加工编号 int, 价格 decimal(18,2))
insert into B Select
'A01', 1, 1.30 union all select
'A01', 2, 2.00 union all select
'A01', 3, 1.10 union all select
'A02', 1, 3 union all select
'A02', 2, 4 union all select
'A02', 3, 2
go
Create Table C(主表编号 nvarchar(10),客户编号 nvarchar(10), 日期 datetime,)
Create Table D(明细表编号 nvarchar(10), 主表编号 nvarchar(10), 产品 nvarchar(10), 加工项目 nvarchar(100))insert into C select
'001','A01','2009-11-1'
insert into D select
'001','001','全棉布','染色;烧毛'
Select C.主表编号,A.加工编号,A.项目明细,B.价格
From D inner join A On CharIndex(A.项目明细,D.加工项目)>0
inner join C On D.主表编号=C.主表编号
inner join B on B.加工编号=A.加工编号 and B.客户编号=C.客户编号
/*主表编号 加工编号 项目明细 价格
---------- ----------- ---------- ---------------------------------------
001 1 染色 1.30
001 3 烧毛 1.10(2 行受影响)
*/Select 主表编号,Sum(价格)
From
(Select C.主表编号,A.加工编号,A.项目明细,B.价格
From D inner join A On CharIndex(A.项目明细,D.加工项目)>0
inner join C On D.主表编号=C.主表编号
inner join B on B.加工编号=A.加工编号 and B.客户编号=C.客户编号) V
Group By 主表编号/*主表编号
---------- ---------------------------------------
001 2.40(1 行受影响)
*/
From D inner join A On CharIndex(A.项目明细,D.加工项目)>0
inner join C On D.主表编号=C.主表编号
inner join B on B.加工编号=A.加工编号 and B.客户编号=C.客户编号 /*客户编号 加工编号 项目明细 单价
---------- ----------- ---------- ---------------------------------------
A01 1 染色 1.30
A01 3 烧毛 1.10(2 行受影响)
*/
--解决问题,主要根据c,d表查询出加工项目的单价表
select b.客户编号,a.加工编号,A.项目明细,B.单价
from B,A
where A.加工编号=B.加工编号
AND B.客户编号 in (select 客户编号 from C)
and exists(select * from c,d where c.主表编号=D.主表编号
AND CHARINDEX(';'+A.项目明细+';',';'+D.加工项目+';')>0)
On CharIndex(A.项目明细,D.加工项目)>0 通过这一句就根据存在的加工项目产生明细记录出来。
根据d.加工项目中分号的数目确定截取次数,再把截取的内容,在A表中查询记录,再把相应的单价找出来,循环多次,就把加工明细全部找出来,但恐惧之狼 的 On CharIndex(A.项目明细,D.加工项目)>0,达到这种目的,我不理解为什么这句语句有这样的能力