我是一个初学者。我有这段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 |
答案 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,则所有计数值都将相同。