如何在SQL中使用“union all”?

问题描述 投票:-1回答:3

我有两个问题。

首先:

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

sql sql-server
3个回答
1
投票

我认为你真的不想要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);

请注意SELECTGROUP BY的修复程序。

如果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);

0
投票
SELECT createdon, IsActive, COUNT(*) AS locationProcessed
FROM Table1
WHERE IsActive in (0, 1)
GROUP BY CAST(CreatedOn AS DATE), CreatedOn, IsActive 

GROUP BY CAST(CreatedOn AS DATE), CreatedOn对我很奇怪。这与GROUP BY CreatedOn没有什么不同。


0
投票
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;
© www.soinside.com 2019 - 2024. All rights reserved.