SQL Server多个数据库连接和求和

时间:2012-12-05 23:16:02

标签: sql sql-server-2008 join sum

我有多个数据库都包含相同的结构,但不是相同的内容,A001,A002,A003,A004 ...... A020在短期和时间内重新制定查询的最快方法是什么?方便的方式,以便我可以得到表输出如下:

Code | Desc | A001 | A002 | A003 | A004 
=====+======+======+======+======+=======
ABCD | ABCD |  0   |   1  |   3  |  4

A001

的查询如下
SELECT AC1.cCode, SUM(AC1.cQtyin) - SUM(AC1.cQtyout) AS A001, AB1.cDes
FROM
A001.dbo.pmStock AC1 
INNER JOIN
A001.dbo.pmProduct AB1 ON AC1.Id = AB1.Prid
GROUP BY AC1.cCode, AB1.cDes

它对如何进行分组有点困惑,如果有一个方便的循环方式或者其他东西,我不必重复每个A001到A020。这在SQL中可行吗?特别是使用多个数据库(A001和A002 ....在同一台服务器上都是不同的数据库)

2 个答案:

答案 0 :(得分:1)

我在我的iPhone上,所以这有点令人头疼。但是,以下可能至少有一点可维护性。将子查询放入视图中可能是值得的。

SELECT
  Product.cDes,
  Stock.cCode,
  SUM(CASE WHEN Stock.source = 'A001' THEN Stock.amount ELSE 0 END) AS A001,
  SUM(CASE WHEN Stock.source = 'A002' THEN Stock.amount ELSE 0 END) AS A002,
  SUM(CASE WHEN Stock.source = 'A003' THEN Stock.amount ELSE 0 END) AS A003,
  Etc, Etc
FROM
  A001.dbo.Product
INNER JOIN
(
  SELECT 'A001' AS source, id, cCode, cQtyIn - cQtyOut AS amount FROM A001.dbo.pmStock
  UNION ALL
  SELECT 'A002' AS source, id, cCode, cQtyIn - cQtyOut AS amount FROM A002.dbo.pmStock
  UNION ALL
  SELECT 'A003' AS source, id, cCode, cQtyIn - cQtyOut AS amount FROM A003.dbo.pmStock
  UNION ALL
  Etc, etc
)
  AS Stock
    ON Stock.Id = Product.Prid
GROUP BY
  Stock.cCode,
  Product.cDes

答案 1 :(得分:0)

您必须静态指定所有数据库名称,表名称和列(它们必须是常量)。这意味着您可以手动编写此查询,也可以构建SQL字符串(在T-SQL或客户端上)并动态执行。