这样的解发器如何编写:有一个加工项目表,表名为: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.   

    晕哦 这么多 
    http://blog.csdn.net/fredrickhu/archive/2009/10/21/4708906.aspx
    参考着做吧
      

  2.   


    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 行)拆分这样吧,后面自己连接
      

  3.   

    Create table A (加工编号 int,  项目明细  nvarchar(10))
    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 行受影响)
    */
      

  4.   

    Create table A (加工编号 int,  项目明细  nvarchar(10))
    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 行受影响)
    */
      

  5.   

    Select B.客户编号,A.加工编号,A.项目明细,B.价格 as 单价
    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 行受影响)
    */
      

  6.   

    最好用存储过程,因为涉及多个表保存,如果用触发器,要注意表保存的先后次序.写触发器的表的信息必须足够.
    --解决问题,主要根据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)
      

  7.   

    恐惧之狼 的语句就可以解决了,我只是不理解
    On CharIndex(A.项目明细,D.加工项目)>0 通过这一句就根据存在的加工项目产生明细记录出来。
      

  8.   

    我本来的思路是这样的
    根据d.加工项目中分号的数目确定截取次数,再把截取的内容,在A表中查询记录,再把相应的单价找出来,循环多次,就把加工明细全部找出来,但恐惧之狼 的  On CharIndex(A.项目明细,D.加工项目)>0,达到这种目的,我不理解为什么这句语句有这样的能力