SQL SUM()函数,查询为每一行返回参数

时间:2016-09-27 23:14:14

标签: sql-server database join sum

首先,抱歉这个怪异的头衔。这是事情: 我在网上商店工作,在亚马逊上销售产品。由于我们销售各种不同的商品,我们会将多个套装中的相同商品发送到亚马逊fba。为了给出所有集合中一个项目的总和,我写了以下查询:

SELECT
  SUM(nQuantity)
  AS [total]
FROM [amazon_fba]
INNER JOIN (SELECT
  [cArtNr]
FROM [tArtikel]
INNER JOIN (SELECT
  [kStueckliste]
FROM [tStueckliste]
WHERE [kArtikel] = (SELECT
  [kArtikel]
FROM [tArtikel]
WHERE [cHAN] = 12345)) [bar]
  ON [tArtikel].[kStueckliste] = [bar].[kStueckliste]) [foo]
  ON [amazon_fba].[cSellerSKU] = [foo].[cArtNr]

cHAN=12345部分仅用于选择我们想知道项目总数的一个特定项目。这个查询本身工作正常,所以这不是问题。

但是,我也知道所有属于集合的产品都有[tArtikel].[kStueckliste]=0,理论上它们很容易识别它们。这让我想到了这个想法,我可以使用这个查询立即生成所有这些产品的列表及其各自的总数,如:

kArtikel | total
=================
   01234 | 23
   56789 | 42

所以基本上我需要像

这样的东西
foreach (
    select [kArtikel]
    from [tArtikel]
    where [tArtikel].[kStueckliste]=0
) do (
    < the query I made >
)

因此我尝试了以下声明:

SELECT
  SUM(nQuantity)
  AS [total]
FROM [amazon_fba]
INNER JOIN (SELECT
  [cArtNr]
FROM [tArtikel]
INNER JOIN (SELECT
  [kStueckliste]
FROM [tStueckliste]
INNER JOIN (SELECT
  [kArtikel]
FROM [tArtikel]
WHERE [tArtikel].[tStueckliste] = 0) [baz]
  ON [tStueckliste].[kArtikel] = [baz].[kArtikel]) [bar]
  ON [tArtikel].[kStueckliste] = [bar].[kStueckliste]) [foo]
  ON [amazon_fba].[cSellerSKU] = [foo].[cArtNr]

这不是 - 我希望 - 返回一个总和列表,而是给了我想要创建的所有总和的总和。 由于我对SQL很新(可能大约两个星期),我既不知道该做什么,也不知道我的错误在哪里,或者我应该用什么措辞来解决这个帖子的奇怪标题。因此,如果有人能帮助我并/或指出我正确的方向,我会非常高兴:)

1 个答案:

答案 0 :(得分:2)

我编写的是MySQL而不是SQL,但我相信它除了一些函数和语法之外非常相似。以下是我认为对您有用的内容:

select am.cArtNr, sum(am.nQuantity) as total
from amazon_fba am
join tArtikel ar on ar.cArtNr=am.cArtNr
join tStueckliste st on st.kStueckliste=ar.kStueckliste
where ar.kStueckliste=0
group by am.cArtNr;

添加group by将按文章进行拆分,但减少括号数(在此实例中为派生表)将加快查询速度,前提是您正在使用索引。再一次,这就是我在MySQL中的表现,而我在其中遇到的唯一其他查询语言是BigQuery,这在这里无济于事。