是这样子的
下达1条任务,这个任务可以下给多个区县。总数是指的要做的商品总数。当时没有要求按地区分各自的数量。那个PM就偷懒,将地区记录在一个字段里面用逗号分开,取的时候用SPLIT取现在要求记录各个区的数量了···头大 我也觉得原来设计的不科学··

解决方案 »

  1.   

    恩,数据库结构设计有点问题,使简单的问题变得复杂了。SQL不知道怎么去实现,通过其他程序来计算吧
      

  2.   

    我觉得只有这样A表
    任务ID(主键)  任务名称  总数
    500001         1号任务   21B表ID(主键) 任务ID  地区   数量 
    1         500001   A    10
    2         500001   B    10
    3         500001   C    1这样可以不 请高手们指教··
    PS  A表不仅仅这几个字段 还有N多
    我如果这样改数据库结构 程序要改死我的··关键是还有报表是根据这个来统计的··
    哭了  高手们求教
      

  3.   

    create  function F_split(
                    @s varchar(8000),          --包含多个数据项的字符串
                    @pos int,                 --要获取的数据项的位置
                    @split varchar(10)        --数据分隔符
    )RETURNS varchar(100)
    AS
    BEGIN
        IF @s IS NULL RETURN(NULL)
        DECLARE @splitlen int                --分隔符长度
        SELECT @splitlen=LEN(@split+'a')-2
        WHILE @pos>1 AND charindex(@split,@s+@split)>0
            SELECT @pos=@pos-1,
                @s=stuff(@s,1,charindex(@split,@s+@split)+@splitlen,'')
        RETURN(nullif(left(@s,charindex(@split,@s+@split)-1),''))
    END
    GOcreate table ta(总数 int, 地区 varchar(10), 数量 varchar(30))
    insert ta select 
    21 ,'A,B,C', '10,10,1 'goselect *
    from (select dbo.F_split(地区,1,',') as 地区,dbo.F_split(数量,1,',') as 数量 from ta union all
          select dbo.F_split(地区,2,',') as 地区,dbo.F_split(数量,2,',') as 数量 from ta union all
          select dbo.F_split(地区,3,',') as 地区,dbo.F_split(数量,3,',') as 数量 from ta 
    ) a
    where 地区 = 'A'
    /*地区      数量                                                                                                   
    ------  -----  
    A         10(所影响的行数为 1 行)*/
    drop table ta
    drop function F_split