重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这四张表本身是什么关系,是没有关系的吗?那就成了一个大笛卡尔乘积的数据量了
成都创新互联公司专注于东胜企业网站建设,响应式网站,商城网站建设。东胜网站建设公司,为东胜等地区提供建站服务。全流程定制网站制作,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
分情况。
假设现有A表,两个字段x和y
第一,所建的表中只有1个字段
select result=x*y into B from A
第二,所建表中除了这个字段,其他字段都来自于A
select [columns],result=x*y into B from A
第三,所建表中有的字段信息不来自于A
没有办法,只能先把表建成,然后根据相关联系(比如ID相同)连接更新
declare @A numeric(38,8)
declare @B numeric(38,8)
declare @C numeric(38,8)
select @A=AVG(A),@B=AVG(B),@C=COUNT(*) From T
select Sum((A-@A) *(B-@B))/@C-1 From T
/*
如果协方差的人公式是这样的话,
@A是A的平均值
@B是B的平均值
@C是记录数
意思是用每条记录和平均值相减之后乘积再求和,最后除以N-1
我看能不能做个自定义函数
*/
根据题意,你应该想让1表中的A列和2表中的B列的对应行相乘,相乘不是问题,所以你的问题主要是在“对应行”上,如果你的两张表都有表示行号的字段,那就很好解决:
select
a.A*b.B
as
乘积
from
table1
as
a,table2
as
b
where
a.ID=b.ID;
如果没有行号,就必须使用函数或者子查询来解决行号的问题,但是你没有告诉我你用的是哪种数据库,SQL
SERVER
2005以上有ROW_NUMBER()函数可以解决,ORACLE有ROWNUM字段可以解决,不同的数据库解决行号的办法不同。这样吧,我给你个比较通用的子查询方法,不用这些特殊的函数:
select
a.A*b.B
as
乘积
from
(select
identity(int,1,1)
as
rownum,*
from
table1)
as
a,
(select
identity(int,1,1)
as
rownum,*
from
table2)
as
b
where
a.rownum=b.rownum
额~~~
晚上看了下我的回答,有点草率了,identity(int,1,1)估计不能这么用(现在过年,没
数据环境测试),下面这个代码保险点:
alter
table
table1
add
column
ididentity(int,1,1)
alter
table
table2
add
column
id
identity(int,1,1)
select
a.A*b.B
as
乘积
from
table1
as
a,table2
as
b
where
a.id=b.id;
select a*b as乘积from tablename
SELECT distinct a.购房人,a.房间号,(a.总房价 -
(SELECT SUM( b.已收款额 )
FROM table1 a, table2 b
WHERE a.房间号 = b.房间号
))
FROM table1 a,table2 b where
SQL具有数据定义、数据操纵和数据控制的功能。
1、SQL数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式又叫做视图(View),全局模式简称模式(Schema),内模式由系统根据数据库模式自动实现,一般无需用户过问。
2、SQL数据操纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。
3、SQL的数据控制功能:主要是对用户的访问权限加以控制,以保证系统的安全性。
with temp1(col1) as(select 1 col1union allselect col1+1 col1from temp1where col1+1=100)select exp(sum(log(col1)))from temp1;
sqlserver 05 及以上版本可用