SQL Server 2008-按null和不具有union的null值分组

Bus*_*nta 3 sql sql-server sql-server-2008

在提示这是重复的问题之前,请注意问题标题中的“无联合”。

按null和非null值分组

出于演示目的:

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

例如

SELECT
    ...
GROUP BY
    UserType, UserOrigin, LoginAttempts
Run Code Online (Sandbox Code Playgroud)

我已经能够按UserType和将结果分组UserOrigin

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

User: Admin Origin: US
User: Admin Origin: CND
User: Editor Origin: US
User: Editor Origin: UK
User: Editor Origin: MX
etc...
Run Code Online (Sandbox Code Playgroud)

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

我真的不需要多少时间的信息,但是否尝试失败了。

换句话说,我仅根据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
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙GROUP BY LoginAttempt将结果按null或不为null 进行分组吗?

谢谢!

Vla*_*nov 5

我会用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
;
Run Code Online (Sandbox Code Playgroud)