首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

从两表的多列中提取有值数据作为最终数据,该如何处理

2012-02-16 
从两表的多列中提取有值数据作为最终数据有两个表,A表有size1,size2....size5, B表有qty1,qty2...qty5通过

从两表的多列中提取有值数据作为最终数据
有两个表,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 allselect 2,1,1,0,1,0declare @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 allselect 2,1,1,1,1,0SELECT  有效值 = a.size1 * b.qty1 + a.size2 * b.qty2 + a.size3 * b.qty3 + a.size4        * b.qty4 + a.size5 * b.qty5FROM    @A表 a        LEFT JOIN @B表 b ON a.id = b.id/*有效值-----------13*/
[解决办法]
如果值是固定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 连接条件

热点排行