1

我有两个表 Product 和 Stock 分别位于两个不同的数据库 dbA 和 dbB 上。它们分别包含 QTY、Quantity 列。

QTY  Quantity
---  -----
50    30
50    40 
50    60
50    50

我想返回这两列中所有值的总和。50 + 50 + .. 40 + 60 + 50 = 380

如果我这样做:SELECT sum(QTY) FROM dbA.Product我得到 200 和SELECT sum(Quantity) FROM dbB.Stock给我 180 但是当我做这样的事情时:

SELECT sum(QTY) + sum(Quantity) FROM dbA.Product, dbB.Stock;我没有得到 380,而是其他一些我不知道它是如何到达的数字。

4

3 回答 3

1

那是因为您正在进行交叉连接。

改为这样做:

select coalesce(asum, 0) + coalesce(bsum, 0) 
from (select sum(qty) as asum from dba.Product) a cross join
     (select sum(quantity) as bsum from dbB.Stock) b

交叉连接在两个表之间产生每对可能的值,总共 16 行 (4*4 = 16) 对于第一个表中的每一行,您将获得以下行:(50, 30), (50, 40 ), (50, 60), (50, 50)。

于 2013-05-25T23:43:58.720 回答
0

您需要对两个子查询求和而不是交叉连接

SELECT (
        SELECT SUM(QTY)
        FROM dba.Product
        ) +
       (
        SELECT SUM(Quantity)
        FROM dbB.Stock
        ) AS Total

SQLFiddle上的演示

于 2013-05-26T05:39:13.823 回答
0

这也有效:

SELECT
     x.total + y.total AS total
FROM
     (SELECT
         SUM(quantity) AS total
      FROM
         dbB.stock) AS x
CROSS JOIN
     (SELECT
         SUM(qty) AS total
      FROM
         dbA.product) AS y
于 2013-05-25T23:58:49.293 回答