如何使用;“联合所有人”;在SQL中?

如何使用;“联合所有人”;在SQL中?,sql,sql-server,Sql,Sql Server,我有两个问题 第一个: SELECT CreatedOn, COUNT(*) AS locationNonProcessed FROM Table1 WHERE IsActive = 0 GROUP BY CAST(CreatedOn AS DATE), CreatedOn SELECT CreatedOn, COUNT(*) AS locationProcessed FROM Table1 WHERE IsActive = 1 GROUP BY CAST(CreatedOn AS DATE)

我有两个问题

第一个

SELECT CreatedOn, COUNT(*) AS locationNonProcessed
FROM Table1
WHERE IsActive = 0
GROUP BY CAST(CreatedOn AS DATE), CreatedOn
SELECT CreatedOn, COUNT(*) AS locationProcessed
FROM Table1
WHERE IsActive = 1
GROUP BY CAST(CreatedOn AS DATE), CreatedOn
第二个

SELECT CreatedOn, COUNT(*) AS locationNonProcessed
FROM Table1
WHERE IsActive = 0
GROUP BY CAST(CreatedOn AS DATE), CreatedOn
SELECT CreatedOn, COUNT(*) AS locationProcessed
FROM Table1
WHERE IsActive = 1
GROUP BY CAST(CreatedOn AS DATE), CreatedOn

我应该如何在这些查询中使用
UNION ALL

我认为您不是真的想要
UNION ALL
。这是很容易实现的,并且会导致不太合理的结果(您将不知道哪个计数是哪个计数)

我怀疑您想要条件聚合:

SELECT CAST(CreatedOn AS DATE),
       SUM(CASE WHEN IsActive = 0 THEN 1 ELSE 0 END) AS locationNonProcessed,
       SUM(CASE WHEN IsActive = 1 THEN 1 ELSE 0 END) as locationProcessed
FROM Table1
GROUP BY CAST(CreatedOn AS DATE);
注意
选择
分组依据
的修正

如果
IsActive
仅采用0、1和可能的
NULL
值,则可简化为:

SELECT CAST(CreatedOn AS DATE),
       SUM(1 - IsActive) AS locationNonProcessed,
       SUM(IsActive) as locationProcessed
FROM Table1
GROUP BY CAST(CreatedOn AS DATE);

按演员分组(CreatedOn作为日期),CreatedOn对我来说很奇怪。这与CreatedOn的
分组没有什么不同

您尝试了什么,面临什么问题?无需全部合并。只需在GROUPBY子句和SELECT列表中包含IsActive。您想要什么结果
UNION-ALL
非常简单。写下这两个查询,并在它们之间放置
UNION ALL
。我认为我们必须按照@jarlh@SandipPatel . . . 这是另一种选择。@SandipPatel这取决于您希望将计数作为单独的行还是额外的列。OP可能会选择这个答案,因为他们不知道如何在原来的问题中得到它,
WHERE
子句实际上可能不需要,因为它是布尔型的。当然,如果OP没有
NULL
s。
SELECT createdon,
       SUM(CASE WHEN IsActive = 0 THEN 1 ELSE 0 END) AS locationNonProcessed,
       SUM(CASE WHEN IsActive = 1 THEN 1 ELSE 0 END) as locationProcessed
FROM Table1
GROUP BY CAST(CreatedOn AS DATE), CreatedOn;