按联合查询分组

Group by Union query

我有 2 个 table 的发票数据,例如日期发票编号。供应商等。首先 table 不同于另一个,这就是为什么它们被创建为分离的 table。然而,table 都有相同的列,我想将其 UNION 和 GROUP BY。

当我用一个 table 做事时,一切正常,但是当尝试 UNION 时,我会按数据分组,例如,如果按客户和国家/地区分组,我会得到两个国家(BE 及以下) BE) 属于同一个客户。结果应该只向我提供一个国家的增值税总和。

我在 Internet 上阅读了一些文章,但这对我的问题没有帮助。到目前为止,我的语法如下所示:

SELECT [Faktury - od nas].customerKey, [Faktury - od nas].InvoiceCountry, Sum([Faktury - od nas].VATamount) AS SumaOfVATamount
FROM [Faktury - od nas]
GROUP BY [Faktury - od nas].customerKey, [Faktury - od nas].InvoiceCountry
UNION
SELECT [Faktury - od nich].customerKey, [Faktury - od nich].InvoiceCountry, Sum([Faktury - od nich].VATamount) AS SumaOfVATamount
FROM [Faktury - od nich]
GROUP BY [Faktury - od nich].customerKey, [Faktury - od nich].InvoiceCountry

到目前为止输出:

01-72 --- BE --- 125,00
01-72 --- 是 --- 180,07
11-54 --- 德国 --- 206,34
11-54 --- 德国 --- 100,00
23-65 --- 法国 --- 23,00
23-65 --- 法国 --- 100,76

期望的输出:

01-72 --- 是 --- 305,07
11-54 --- 德国 --- 306,34
23-65 --- 法国 --- 123,76

编辑: 我在查询中做了一些更改,发现它停止了预期的分组。你能帮忙吗?

SELECT [E100 Key], [Nazwa Klienta], [Kraj], [Okres], Sum(Format(Round([Kwota1],2),'Standard')) AS [Kwota], [Waluta], [Status], [Rozliczenie]

FROM(

SELECT [Faktury - od nas].customerKey AS [E100 Key], [Faktury - od nas].CustomerName AS [Nazwa Klienta], [Faktury - od nas].InvoiceCountry AS Kraj, [Faktury - od nas].Okres AS Okres, Sum([Faktury - od nas].VATamount) AS Kwota1, [Faktury - od nas].Currency AS Waluta, [Faktury - od nas].Status AS Status, [Faktury - od nas].[Transtax invoice No] AS Rozliczenie
FROM [Faktury - od nas]
GROUP BY [Faktury - od nas].customerKey, [Faktury - od nas].CustomerName, [Faktury - od nas].InvoiceCountry, [Faktury - od nas].Okres, [Faktury - od nas].Currency, [Faktury - od nas].Status, [Faktury - od nas].[Transtax invoice No]
HAVING ((([Faktury - od nas].Okres) Is Not Null))

UNION

SELECT [Faktury - od nich].customerKey AS [E100 Key], [Faktury - od nich].CustomerName AS [Nazwa Klienta], [Faktury - od nich].InvoiceCountry AS Kraj, [Faktury - od nich].Okres AS Okres, Sum([Faktury - od nich].VATamount) AS Kwota1, [Faktury - od nich].Currency AS Waluta, [Faktury - od nich].Status AS Status, [Faktury - od nich].[Transtax invoice No] AS Rozliczenie
FROM [Faktury - od nich]
GROUP BY [Faktury - od nich].customerKey, [Faktury - od nich].CustomerName, [Faktury - od nich].InvoiceCountry, [Faktury - od nich].Okres, [Faktury - od nich].Currency, [Faktury - od nich].Status, [Faktury - od nich].[Transtax invoice No]
HAVING ((([Faktury - od nich].Okres) Is Not Null))

)GROUP BY [E100 Key], [Nazwa Klienta], [Kraj], [Okres], [Waluta], [Status], [Rozliczenie];

问题已解决。
有 2 个问题:

  1. 语法错误。其他问题有助于解决这个问题:Group by with UNION
  2. 其中一列中的不同数据。第一个 table 包含零长度字符串和第一个空值。乍一看看起来一样,但 运行 查询发现差异。

非常感谢 asdev 一直关注我的问题并提供了解决策略。