SQL Server 2008 - 分组为空,而不是没有联合

时间:2015-10-28 02:20:23

标签: sql sql-server sql-server-2008

在建议这是一个重复的问题之前,请注意问题标题中的“不合并”。

Group by null and not null values

出于演示目的:

我有一个非常大的SQL,它根据几个标准对结果进行分组。 UserType,UserOrigin,LoginAttempts

e.g。

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仅将结果分组为空或非空吗?

谢谢!

1 个答案:

答案 0 :(得分: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
;