我读了一些关于这个的话题,但我对sql不是很了解。我有10个包含这些字段的表:
我希望在具有特定类型时将所有值filed汇总在一起。我试图做这样的事情,但它没有用。
select sum(tab1.value) + sum(tab2.value)
from tab1, tab2
where tab1.type = tab2.type = 'box'
我想我可以做很多像这样的简单查询然后总结所有结果
select sum(value) from tab1 where type='box'
select sum(value) from tab2 where type='box'
但我想知道我是否可以进行一次查询
感谢
答案 0 :(得分:1)
具有相同结构的多个表通常表明数据库设计不佳。
我建议您使用上一种方法,但将子查询放在from
子句中,然后将结果添加到select
:
select t1.value + t2.value + . .
from (select sum(value) as value from tab1 where type='box') t1 cross join
(select sum(value) as value from tab2 where type='box') t2 cross join
. . .
或者,您可以在union all
子句中from
将它们放在一起,然后获取总和:
select sum(value)
from ((select sum(value) as value from tab1 where type='box') union all
(select sum(value) as value from tab2 where type='box') union all
. . .
) t;
答案 1 :(得分:0)
如果表格未通过FK / PK链接,您可以使用多个子查询:
SELECT (SELECT SUM(tab1.value) FROM tab1 WHERE type='box') as Tab1Sum,
(SELECT SUM(tab2.value) FROM tab2 WHERE type='box') as Tab2Sum -- and so on...
这会产生一条记录,其中每列是每个表的总和。
答案 2 :(得分:0)
1.使用单选;
DECLARE @type NVARCHAR(255) = N'Box';
SELECT (SELECT SUM(value) FROM tab1 WHERE type=@Box)
+ (SELECT SUM(value) FROM tab2 WHERE type=@Box)
+ (SELECT SUM(value) FROM tab3 WHERE type=@Box)
+ (...)
我认为这是最简单的。
2.您创建视图
CREATE VIEW tabs
AS
SELECT value, type FROM tab1
UNION
SELECT value, type FROM tab2
UNION
SELECT value, type FROM tab3
UNION
...
然后
SELECT SUM(value) FROM tabs WHERE type = 'BOX'
3.想想为什么类似的列是不同的表。它们可以合并到单个表中吗? 如果答案为否,并且您有太多表,请考虑连接SQL字符串并使用sp_executesql来执行它。