如何统计多个数据库里相同字段的值

panxiaosen 2010-07-23 05:16:59
现在有几个数据库 A,B,C,D,E....,数量不确定
具体数据库的名称是从另外一张表里读出来的

这些数据库都是一模一样的,我现在要统计每个数据库某张表里某个字段的总和,比如累加 TEST表里的 VALUE字段

要怎么写呢??
...全文
301 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
panxiaosen 2010-07-24
  • 打赏
  • 举报
回复
谢谢楼上各位的回复,顶一下..13楼有新问题
claro 2010-07-23
  • 打赏
  • 举报
回复
楼上的都辛苦了。。。
bancxc 2010-07-23
  • 打赏
  • 举报
回复
膜拜升额[Quote=引用 6 楼 ldslove 的回复:]
SQL code
create table #DB (DBNAME VARCHAR(20))
INSERT #DB
SELECT 'A' union all
SELECT 'B' union all
SELECT 'C' union all
SELECT 'D' union all
SELECT 'E'

declare @var varchar(200)
select @v……
[/Quote]
永生天地 2010-07-23
  • 打赏
  • 举报
回复
-- 测试环境

if object_id('tb') is not null drop table tb
go
create table tb
(
id int,
name varchar(20)
)
go
insert tb
select 1,'A' union all
select 2,'B'
go

-- 查询
declare @s varchar(8000)

select @s=isnull(@s+' union all ','')+' select '''+name+''' as [db], sum(value) as value from '+name+'..test '
from tb

set @s = 'select * from ('+@s+') t'
print @s
--select * from ( select 'A' as [db], sum(value) as value from A..test union all select 'B' as [db], sum(value) as value from B..test ) t

exec (@s)
panxiaosen 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hokor 的回复:]
如果所有的库在同一个实例中可以用动态语句试试。

SQL code
DECLARE @SQL VARCHAR(1000)
set @SQL = ''
SELECT @SQL = isnull(@SQL+'SELECT SUM(VAlUE) VAlUE FROM ','') + quotename(name) + '.dbo.[test] UNION ALL 'FROM master.d……
[/Quote]


这个代码可以用。实际上每个数据库是一个分店的数据, 如果想分别列出每个商品的在各个数据库里的总值呢?

ID | 数据库B+ 数据库C+数据库D+数据库E......总和
test001 | 1000
test002 | 1021
test003 | 1024
test004 | 1026


panxiaosen 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 htl258 的回复:]
引用 5 楼 panxiaosen 的回复:
A 数据库 表 DBLIST,保存的是所有的数据库的名字,比如 B C D E F....


B C D E F 结构都是一样的,里面有个表 TEST, 现在想统计所有数据库的TEST里面的VALUE字段的总和....


静态语句是不是这样的效果:


SQL code
select sum(value)
from (
……
[/Quote]

是的
永生天地 2010-07-23
  • 打赏
  • 举报
回复
-- 测试环境

if object_id('tb') is not null drop table tb
go
create table tb
(
id int,
name varchar(20)
)
go
insert tb
select 1,'A' union all
select 2,'B'
go

-- 查询
declare @s varchar(8000)

select @s=isnull(@s+' union all ','')+' select value from '+name+'..test '
from tb

set @s = 'select sum(value) from ('+@s+') t'
--print @s
--select sum(value) from ( select value from A..test union all select value from B..test ) t
exec (@s)

htl258_Tony 2010-07-23
  • 打赏
  • 举报
回复


DECLARE @s VARCHAR(8000)
SELECT @s = ISNULL(@s+' union all ','')+'select value from '+QUOTENAME(dbname)+'.dbo.test'
FROM a.dbo.dblist
WHERE dbname in('A','B','C'...)
EXEC ('select sum(value) from ('+@s+') t')
东那个升 2010-07-23
  • 打赏
  • 举报
回复
declare @var varchar(200),@TB_NAME VARCHAR(50),@COL_NAME VARCHAR(50)
SELECT @TB_NAME='TEST',@COL_NAME='VALUE'
select @var='selcet '+replace((SELECT '(SELECT sum('+@COL_NAME+') from '+DBNAME+'.dbo.'+@TB_NAME+')' as 'data()'
FROM #DB
WHERE DBNAME IN('A','B','C')--筛选数据库
for xml path('')),') (',')+(')+' as V_SUM'

print(@var)
--exec(@var)
东那个升 2010-07-23
  • 打赏
  • 举报
回复


create table #DB (DBNAME VARCHAR(20))
INSERT #DB
SELECT 'A' union all
SELECT 'B' union all
SELECT 'C' union all
SELECT 'D' union all
SELECT 'E'

declare @var varchar(200),@TB_NAME VARCHAR(50),@COL_NAME VARCHAR(50)
SELECT @TB_NAME='TEST',@COL_NAME='VALUE'
select @var='selcet '+replace((SELECT '(SELECT sum('+@COL_NAME+') from '+DBNAME+'.dbo.'+@TB_NAME+')' as 'data()'
FROM #DB
for xml path('')),') (',')+(')+' as V_SUM'

print(@var)
--exec(@var)
/*
selcet (SELECT sum(VALUE) from A.dbo.TEST)
+(SELECT sum(VALUE) from B.dbo.TEST)
+(SELECT sum(VALUE) from C.dbo.TEST)
+(SELECT sum(VALUE) from D.dbo.TEST)
+(SELECT sum(VALUE) from E.dbo.TEST) as V_SUM
*/
htl258_Tony 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 panxiaosen 的回复:]
A 数据库 表 DBLIST,保存的是所有的数据库的名字,比如 B C D E F....


B C D E F 结构都是一样的,里面有个表 TEST, 现在想统计所有数据库的TEST里面的VALUE字段的总和....
[/Quote]

静态语句是不是这样的效果:

select sum(value)
from (
select value from a.dbo.test
union all
select value from b.dbo.test
.....
union all
select value from f.dbo.test
) as t
东那个升 2010-07-23
  • 打赏
  • 举报
回复
create table #DB (DBNAME VARCHAR(20))
INSERT #DB
SELECT 'A' union all
SELECT 'B' union all
SELECT 'C' union all
SELECT 'D' union all
SELECT 'E'

declare @var varchar(200)
select @var='selcet '+replace((SELECT '(SELECT sum(value) from '+DBNAME+'.dbo.TEST)' as 'data()' FROM #DB for xml path('')),') (',')+(')+' as V_SUM'
exec(@var)
panxiaosen 2010-07-23
  • 打赏
  • 举报
回复
A 数据库 表 DBLIST,保存的是所有的数据库的名字,比如 B C D E F....


B C D E F 结构都是一样的,里面有个表 TEST, 现在想统计所有数据库的TEST里面的VALUE字段的总和....
hokor 2010-07-23
  • 打赏
  • 举报
回复
如果所有的库在同一个实例中可以用动态语句试试。
DECLARE @SQL VARCHAR(1000)
set @SQL = ''
SELECT @SQL = isnull(@SQL+'SELECT SUM(VAlUE) VAlUE FROM ','') + quotename(name) + '.dbo.[test] UNION ALL 'FROM master.dbo.sysdatabases where name in ('A','B','C','D')
PRINT @SQL
SELECT @SQL = 'SELECT SUM(VAlUE) VAlUE FROM ('+LEFT(@SQL,LEN(@SQL)-LEN('UNION ALL '))+' ) AS T'
PRINT @SQL
EXEC (@SQL)
panxiaosen 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 csuxp2008 的回复:]
我很关注:这张表是存放在哪个数据库的?
[/Quote]

这张表是放在另外一个数据库里的...
claro 2010-07-23
  • 打赏
  • 举报
回复
给点数据!否则写完还要解释。
csuxp2008 2010-07-23
  • 打赏
  • 举报
回复
我很关注:这张表是存放在哪个数据库的?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧