--try select [学生名],Sum([金额]) as [金额] from 学生 A inner join 交易 B on charindex('|'+A.交易ID+'|', '|'+B.交易ID+'|')>0 group by A.[学生名]
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 行)
刚才我也想过用这种连接查询,不过拼接SQL语句在 asp 或asp.net等程序中似乎不好写出来.譬如在asp.net中,会把 +A.交易ID+ 当成一个变量进行拼接,因实际上没这种变量,所以有可能报错.
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 学生名
读取表1中的数据
用Split('|')分割ID
然后读取数组里面的ID 计算...
太麻烦了
求Sql高手
不要在用户表中保存交易记录在交易表中添加一个字段"用户ID"这样查询起来就非常方便了.
select [学生名],Sum([金额]) as [金额]
from 学生 A
inner join 交易 B on charindex('|'+A.交易ID+'|', '|'+B.交易ID+'|')>0
group by A.[学生名]
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 行)
刚才我也想过用这种连接查询,不过拼接SQL语句在
asp 或asp.net等程序中似乎不好写出来.譬如在asp.net中,会把 +A.交易ID+ 当成一个变量进行拼接,因实际上没这种变量,所以有可能报错.
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 学生名