按联盟查询分组

时间:2015-09-22 11:25:28

标签: ms-access group-by union

我有两张表,其中包含日期发票号等发票的数据。第一个表与另一个表的不同之处在于它们创建为分隔表的原因。但是两个表都有相同的列,我想要UNION和GROUP BY。

当我使用一个表做事情时一切正常但是在尝试UNION时我会按数据分组,例如,如果按客户和国家分组,我会得到同一个客户的两个国家(BE及以下也是BE) 。结果应该只为我提供一个总额为VATamount的国家。

我在互联网上阅读了一些文章,但它对我的问题没有帮助。到目前为止,我的语法如下:

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 --- BE --- 180,07
11-54 --- DE --- 206,34
11-54 --- DE --- 100,00
23-65 --- FR --- 23,00
23-65 --- FR --- 100,76

期望的输出:

01-72 --- BE --- 305,07
11-54 --- DE --- 306,34
23-65 --- FR --- 123,76

编辑: 我在查询中做了一些更改,并发现它应该是stoped grouping。你能帮忙吗?

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];

1 个答案:

答案 0 :(得分:0)

问题解决了。
有两个问题:

  1. 语法错误。其他问题有助于解决这个问题:Group by with UNION
  2. 其中一列中的不同数据。第一个表包含零长度字符串和第一个Null值。乍一看看起来一样,但运行查询显示出差异。
  3. 非常感谢与我的问题保持联系的 asdev ,并提供了透视的策略。