首先,抱歉这个怪异的头衔。这是事情: 我在网上商店工作,在亚马逊上销售产品。由于我们销售各种不同的商品,我们会将多个套装中的相同商品发送到亚马逊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很新(可能大约两个星期),我既不知道该做什么,也不知道我的错误在哪里,或者我应该用什么措辞来解决这个帖子的奇怪标题。因此,如果有人能帮助我并/或指出我正确的方向,我会非常高兴:)
答案 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,这在这里无济于事。