本帖最后由 realboxforme 于 2010-01-05 18:37:34 编辑

解决方案 »

  1.   

    将两张表用视图联系起来,然后再写sql 语句实现。语句是比较简单的。
      

  2.   

    如果用程序的话
    读取表1中的数据
    用Split('|')分割ID
    然后读取数组里面的ID 计算...
    太麻烦了 
    求Sql高手
      

  3.   

    我现在就是这样解决的,执行速度很不好,请求SQl语句!是不是要用join?
      

  4.   

    关键你这个表结构设计的不够理想,所以导致使用表时很麻烦使用存储过程是比较好的办法.它能执行比较复杂的SQL逻辑建议修改表结构:
    不要在用户表中保存交易记录在交易表中添加一个字段"用户ID"这样查询起来就非常方便了.
      

  5.   

    --try
    select [学生名],Sum([金额]) as [金额]
    from 学生 A
    inner join 交易 B on charindex('|'+A.交易ID+'|', '|'+B.交易ID+'|')>0
    group by A.[学生名]
      

  6.   

    create table 学生(学生名 varchar(10),交易ID varchar(20))
    insert into 学生 values( '张三','1|2') 
    insert into 学生 values( '李四','3|4') 
    insert into 学生 values( '王五','5|6|7') 
    create table 交易 (交易ID varchar(20),金额 int)
    insert into 交易 select
    '1',200 union all select
    '2',100 union all select
    '3',150 union all select
    '4',  90 union all select
    '5',200 union all select
    '6',100 union all select
    '7',  80 select [学生名],Sum([金额]) as [金额]
    from 学生 A
    inner join 交易 B on charindex('|'+B.交易ID+'|', '|'+A.交易ID+'|')>0
    group by A.[学生名]学生名        金额          
    ---------- ----------- 
    李四         240
    王五         380
    张三         300(所影响的行数为 3 行)
      

  7.   


    刚才我也想过用这种连接查询,不过拼接SQL语句在
    asp 或asp.net等程序中似乎不好写出来.譬如在asp.net中,会把 +A.交易ID+ 当成一个变量进行拼接,因实际上没这种变量,所以有可能报错.
      

  8.   


    use tempdb 
    go if (object_id ('学生' ) is not null ) drop table   学生 
    go 
    if (object_id ('交易' ) is not null ) drop table   交易 
    go 
    create table 学生(学生名 varchar(10),交易ID varchar(20))
    insert into 学生 values( '张三','1|2') 
    insert into 学生 values( '李四','3|4') 
    insert into 学生 values( '王五','5|6|7') 
    create table 交易 (交易ID varchar(20),金额 int)
    insert into 交易 select
    '1',200 union all select
    '2',100 union all select
    '3',150 union all select
    '4',  90 union all select
    '5',200 union all select
    '6',100 union all select
    '7',  80 
    go select a . 学生名 , sum(b. 金额) from (select a . 学生名 , b. 交易ID from (   select 学生名 , convert (xml , '<v>' + replace (a . 交易ID , '|' , '</v><v>' )+ '</v>' ) as 交易ID 
            from 学生 a ) a outer apply 
            (
                select t . c . value ('.' , 'varchar(max)' ) AS 交易ID from a . 交易ID . nodes ('//v' ) AS t (c )
            )b
    ) a inner join   交易 b on a . 交易ID = b. 交易ID  group by 学生名