日期:2014-05-18  浏览次数:20580 次

从两表的多列中提取有值数据作为最终数据
有两个表,A表有size1,size2....size5, B表有qty1,qty2...qty5
通过A表中哪个字段有值来提取B表中对应的数量,相乘的结果如果大于0就是有效值。

并且A表中有可能只有一个字段有值,也有可能五个字段都有值,多过一个字段有值,就要多个有效值相加后的结果作为有效值。

比如A表:
size1, size2,size3,size4,size5
0 0 0 1 0
B表
qty1, qty2, qty3, qty4, qty5
0 0 0 1 0
这样有效值是1,最终显示结果也是1
如果这样A表:
size1,size2,size3,size4,size5
1 1 1 1 0
B 表
qty1,qty2,qty3,qty4,qty5
1 1 0 1 0
有效值是3,最终显示结果也是3

------解决方案--------------------
只要列不为空

select size1*qty1+size2*qty2+size3*qty3+size4*qty4+size5*qty5
from ta a,tb b 
where a.主键= b.主键
------解决方案--------------------
SQL code

declare @A表 table 
(id int,size1 int,size2 int,size3 int,size4 int,size5 int)
insert into @A表
select 1,0,0,0,1,0 union all
select 2,1,1,0,1,0

declare @B表 table (id int,qty1 int,qty2 int,qty3 int,qty4 int,qty5 int)
insert into @B表
select 1,0,0,0,1,0 union all
select 2,1,1,1,1,0

SELECT  有效值 = a.size1 * b.qty1 + a.size2 * b.qty2 + a.size3 * b.qty3 + a.size4
        * b.qty4 + a.size5 * b.qty5
FROM    @A表 a
        LEFT JOIN @B表 b ON a.id = b.id
/*
有效值
-----------
1
3
*/

------解决方案--------------------
如果值是固定0和1时可以去掉sign,如果是>=0时要加上
------解决方案--------------------
如果没有NULL值,并且都大于等于零,则直接

SELECT 
size1*qty1+size2*qty2+size3*qty3+size4*qty4+size5*qty5
FROM A,B where 连接条件

如果有NULL值,或者相乘的结果可能小于零,且要丢弃,则要判断:

SELECT 
(case when size1*qty1>0 then size1*qty2 else 0 end)+
(case when size2*qty2>0 then size2*qty2 else 0 end)+
(case when size3*qty3>0 then size3*qty3 else 0 end)+
(case when size4*qty4>0 then size4*qty4 else 0 end)+
(case when size5*qty5>0 then size5*qty5 else 0 end)
FROM A,B where 连接条件