访问联盟&计数

时间:2017-08-01 12:44:15

标签: sql ms-access

我是一个初学者。我有这段SQL代码:

SELECT Red_tag.Zglaszajacy
From Red_tag
UNION
SELECT Red_tag.Interweniujacy
From Red_tag

SELECT Count(Red_tag.Zglaszajacy) AS PoliczOfZglaszajacy, Red_tag.Interweniujacy AS PoliczOfInterweniujacy
FROM Red_tag

Union工作,但我得到“FROM的语法错误”。我如何获得这样的输出?

|Zglaszajacy&Interweniujacy|CountOfZglaszajacy|CountOfInterweniujący|

修改 似乎比我想象的更复杂。 Zglaszajacy和Interweniujacy是一群人。这两个组也重叠(大约30%的人在两个栏目中都有记录)。因此,有些情况下,同一个人在Zglaszajacy有3条记录,在Interweniujacy有7条记录。这就是为什么我需要联合这两组,然后显示每个人的两个累积计数。我不确定我是否解释得很好,所以这是草稿:

|Union of Zglaszający and Interweniujacy |Count of Zglaszajacy| Count of Interweniujacy|
---------------------------------------------------------------------------------------
|John Doe                               |     3              |  5                     |
|Tom Smith                              |  NULL              |  1                     |

3 个答案:

答案 0 :(得分:0)

我认为你需要的只是

SELECT Count(Red_tag.Zglaszajacy) AS PoliczOfZglaszajacy, Red_tag.Interweniujacy AS PoliczOfInterweniujacy


FROM Red_tag
GROUP BY Red_tag.Interweniujacy

所以不需要 UNION

答案 1 :(得分:0)

通过使用您的UNION查询,您将获得如下所示的表:

Zglaszajacy|Interweniujacy
A           B
C           NULL
NULL        B

把它变成这个:

Zglaszajacy
A
C
NULL
B

您丢失了一些记录,因为UNION只保留不同的记录。请改用UNION ALL来保留所有记录。

您的第二个SQL查询无效,因为您没有GROUP BY子句来告诉聚合函数COUNT()它应该计算什么。

我在下面做的是获取你的UNION查询并添加一个标志,如果该记录是Zglaszajacy类型或Interweniujacy类型。然后,我将其用作FROM子句中的子查询。从那里,你选择你的人名并使用COUNT()聚合函数(或者SUM()在这种情况下也会起作用,因为我用数字标记它)来得到你的总数。

最后,我添加了WHERE子句来消除分组后留下的单个NULL名称,我认为这对您没用。

SELECT Person_Name, COUNT(Z_Type) AS Zglaszajacy_Count, 
    COUNT(I_Type) AS Interweniujacy_Count
FROM (SELECT Zglaszajacy as Person_Name, 1 AS Z_Type, NULL AS I_Type FROM Red_tag
      UNION ALL
      SELECT Interweniujacy, NULL, 1 FROM Red_tag)
WHERE Person_Name IS NOT NULL
GROUP BY Person_Name
ORDER BY Person_Name;

我在MS Access中对此进行了测试,但确实有效。

答案 2 :(得分:0)

SELECT 
    Red_tag.Zglaszajacy, 
    Red_tag.Interweniujacy, 
    (SELECT COUNT(Red_tag.Zglaszajacy) FROM Red_tag) AS PoliczOfZglaszajacy,
    (SELECT COUNT(Red_tag.Interweniujacy) FROM Red_tag) AS PoliczOfInterweniujacy
FROM Red_tag

这将为您提供所需的输出,但您可能需要考虑这是否是您想要的。第3列中的值将全部相同,第4列中的值将全部相同。此外,如果将列Zglaszajacy和Interweniujacy定义为NOT NULL,则所有计数值都将相同。