SQL Server 2008 - 在没有联合的情况下按空值和非空值分组

标签 sql sql-server sql-server-2008

在暗示这是一个重复的问题之前,请注意问题标题中的“without union”。

( Group by null and not null values )

为了演示目的:

我有一个相当大的 SQL,它根据几个条件对结果进行分组。 用户类型、用户来源、登录尝试

例如

SELECT
    ...
GROUP BY
    UserType, UserOrigin, LoginAttempts

我已经能够按 UserTypeUserOrigin 对我的结果进行分组。

所以我的结果看起来像这样。

User: Admin Origin: US
User: Admin Origin: CND
User: Editor Origin: US
User: Editor Origin: UK
User: Editor Origin: MX
etc...

我还尝试按登录尝试次数对结果进行分组,但仅基于值是否为空。

我真的不需要关于尝试次数的信息,而是尝试是否失败的信息。

换句话说,我只想根据是否有 LoginAttempts 列对结果进行分组。

这是 SQL 的预期结果。

User: Admin Origin: US Login Attempts: null
User: Admin Origin: US Login Attempts: (not null)
User: Admin Origin: CND Login Attempts: null
User: Admin Origin: CND Login Attempts: (not null)
User: Editor Origin: US Login Attempts: null
User: Editor Origin: US Login Attempts: (not null)
User: Editor Origin: UK Login Attempts: null
User: Editor Origin: UK Login Attempts: (not null)
User: Editor Origin: MX Login Attempts: null
User: Editor Origin: MX Login Attempts: (not null)


TABLE LOGINS
------------------------------
ID      LoginAttempts
1       null
2       1
3       2
4       null
5       1
6       7

任何人都可以帮助GROUP BY LoginAttempt 仅按 null 或非 null 对结果进行分组吗?

谢谢!

最佳答案

我会使用CASE:

SELECT
    UserType
    ,UserOrigin
    ,CASE WHEN LoginAttempts IS NULL
    THEN NULL
    ELSE '(not null)' END AS LoginAttempts
FROM
    ...
GROUP BY
    UserType
    ,UserOrigin
    ,CASE WHEN LoginAttempts IS NULL
    THEN NULL
    ELSE '(not null)' END
;

关于SQL Server 2008 - 在没有联合的情况下按空值和非空值分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33381844/

相关文章:

sql-server - 分解 SQL 脚本

sql-server - Entity Framework 核心2.0 : How to configure abstract base class once

sql-server - SSIS 使用太多内存将大型 (40GB+) XML 文件加载到 SQL Server 表中

SQL 排序并插入到每行位置编号

mysql - 如何根据具有特定列值的行数在 GROUP BY 中添加条件?

sql - 如何在配置单元(HQL)中获取倒数第二个分区

mysql - 外键约束失败 - 可能误解了我的关系

mysql - 有没有办法优化这个更新查询?

sql-server-2008 - 如何在存储过程中调用标量函数

SQL按组序号