1

我有 2 张桌子:

  • 表 A ( id as int, M as int,...)
  • 表 B ( Aid as int , P as int,...)

A 和 B 之间存在关系A.id = B.Aid。父表是A,子表是B,这意味着A中的一行可能在B中有多行。

我需要编写一个返回以下信息的 T-SQL 查询:

  • A的一些列和B中的相关行
  • (M / Sum(p)) as 'Percent'为 A 的每一行计算这个
4

1 回答 1

0

你可以这样做:

SELECT
  a.M,
  (a.M / pSum)
FROM tableA a
INNER JOIN
(
  SELECT aid, SUM(p) pSum
  FROM TableB
  GROUP BY aid
) b ON A.id = B.Aid;

SQL 小提琴演示

更新:如果您想从 中返回更多的一列,其中每个父记录tableb的总和,您可以像这样加入更多时间:ptableaTableB

SELECT
  a.M,
  b.p,
  (a.M / groupedb.pSum)
FROM tableA a
INNER JOIN TableB b ON A.id = B.Aid
INNER JOIN
(
  SELECT aid, SUM(p) pSum
  FROM TableB
  GROUP BY aid
) groupedb ON A.id = groupedb.Aid;

更新的 SQL Fiddle 演示

但这将使计算来自表中每个记录的tableB冗余中每个父记录的冗余的总和。tableAB

于 2012-12-10T08:02:37.637 回答