使用 SQL 相同值的 case 语句时结果行不同

Different rows for results while using the SQL case statement for same value

结果应该在一行中,包含登录和未登录计数。为什么同一帐户出现在不同的两行中?

SELECT distinct  Account
     , SUM(CASE Val WHEN status='logged in' THEN  1 Else 0  END) AS 'Total logged in' 
     , SUM(CASE Val WHEN status='not logged in' THEN  1 Else 0 END) AS 'total not logged in '
FROM TableAccount 
GROUP BY Account

account    logged in    not logged in
A            21             0
A            0              2

如果您的 table 结构相同,这似乎给出了所需的结果。

create table test1(col1 varchar(10), col2 varchar(10))

insert into test1
values('A','L'),
('A','NL'),
('A','L'),
('A','L')

SELECT distinct  col1
     , SUM(CASE WHEN col2='L' THEN  1 Else 0  END) AS 'Total logged in' 
     , SUM(CASE WHEN col2='NL' THEN  1 Else 0 END) AS 'total not logged in '
FROM test1 
GROUP BY col1

SELECT DISTINCT几乎不需要 GROUP BY。另外,你是对的,'A' 应该只有一行——假设帐户完全相同。

您得到两行的事实意味着它们不相同。一个问题可能是尾随空白。您可以检查一下:

SELECT DISTINCT '|' +  Account + '|'
FROM TableAccount ;

其他问题可能是字符看起来相同或隐藏字符。查找问题可能需要一些调查。