SQL Query计算百分比

时间:2012-12-10 07:59:09

标签: sql sql-server tsql

我有两张桌子:

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

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

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

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

1 个答案:

答案 0 :(得分: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 Fiddle Demo

更新:如果您想从tableb返回多一列,p中每条父记录的总和为tablea,您可以在更长的时间内加入TableB

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;

Updated SQL Fiddle Demo

但是,对于表tableB的每条记录,这将使tableA中每个父记录的B冗余的计算冗余为计算。{/ p>