sql - 使用两个不同的子句计算两列的行数

标签 sql sql-server common-table-expression

我在 CTE 之后想要返回两列,一列包含 1 的总数,一列包含 0 的总数。目前我可以让它返回一列,其中 1 的总数使用:

WITH getOnesAndZerosCTE
AS (

    SELECT COUNT([message]) AS TotalNo1s
    FROM dbo.post
    WHERE dbo.checkletters([message]) = 1

    --SELECT COUNT([message]) AS TotalNo0s
    --FROM dbo.post
    --WHERE dbo.checkletters([message]) = 0

    )
SELECT * FROM getOnesAndZerosCTE;

我如何在同一个 CTE 中有一个名为 TotalNo0s 的第二列,我在那里发表评论以表明我的意思。

最佳答案

使用条件聚合:

WITH getOnesAndZerosCTE AS(
    SELECT
        TotalNo1s = SUM(CASE WHEN dbo.checkletters([message]) = 1 THEN 1 ELSE 0 END),
        TotalNo0s = SUM(CASE WHEN dbo.checkletters([message]) = 0 THEN 1 ELSE 0 END)
    FROM post
)
SELECT * FROM getOnesAndZerosCTE;

关于sql - 使用两个不同的子句计算两列的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32323846/

相关文章:

mysql - 按日期和主要加入查询

mysql - 如何在 UNION 中使用 ORDER BY

sql-server - 使用兼容性级别较低的 SQL Server 是否有负面影响

mysql - 从 MySQL 中的分层数据生成基于深度的树(无 CTE)

sql - SQLite 插入中的 NS_ERROR_FAILURE

sql - WHERE Column NOT LIKE 无法与递归 cte 一起正常工作

C# Entity Framework Core - LINQ 检查一个数组在另一个数组中是否存在

sql-server - SQL Server 2012 CTE 查找分层数据的根或顶层父级

sql - 获取具有 SQL Server 2008 列的 MAX 值的整个 ROW

sql - 游标的替代品