0

基本上我正在尝试将存在从一个寄存器移动到另一个寄存器,从原点减去并将其添加到命运中。我有一张这样的“股票”表:

国家城市价值

AA      01   500
AA      02   400
BB      01   300
CC      01   100
CC      02  1000
CC      03  2000

我收到了一份结构如下的“运动”文件:
数量 originCountry originCity endCountry endCity

10      AA             01         CC         01
20      AA             01         BB         02
50      BB             01         CC         03

有没有办法在不创建两个规范化表和几个查询的情况下做到这一点。

编辑

答案应该是这样的:

数量 originCountry originCity endCountry endCity

AA      01   470
AA      02   400
BB      01   250
CC      01   110
CC      02  1020
CC      03  2050

负数和业务规则不相关

4

1 回答 1

0

试试这个(isnull 用于 tsql):

SELECT country, city, value - isnull(p, 0) + isnull(m, 0) as q
FROM Stocks AS s
LEFT JOIN (SELECT originCountry, originCity, Sum(quantity) m FROM movements GROUP BY originCountry, originCity) AS mm 
  ON originCountry = s.country AND originCity = s.city
LEFT JOIN (SELECT endCountry, endCity, Sum(quantity) p FROM movements GROUP BY endCountry, endCity) AS mp ON
  ON endCountry = s.country AND endCity = s.city

对于MS ACCESS(下次添加标签......):
这应该可以工作:

SELECT country, city, value - Nz(p, 0) + Nz(m, 0) as q
FROM ((Stocks AS s
LEFT JOIN (SELECT originCountry, originCity, Sum(quantity) m FROM movements GROUP BY originCountry, originCity) AS mm 
  ON (originCountry = s.country AND originCity = s.city))
LEFT JOIN (SELECT endCountry, endCity, Sum(quantity) p FROM movements GROUP BY endCountry, endCity) AS mp ON
  ON (endCountry = s.country AND endCity = s.city))

或者这个((如果你得到错误然后使用 DSum 函数):

SELECT country, city, value 
  - Nz((
    SELECT Sum(quantity) m 
    FROM movements 
    WHERE originCountry = s.country AND originCity = s.city
  ), 0) + Nz((
    SELECT Sum(quantity) p 
    FROM movements 
    WHERE endCountry = s.country AND endCity = s.city
  ), 0) as q
FROM Stocks AS s
于 2016-04-19T20:28:14.330 回答