Sql server COUNT(DISTINCT())返回假值
我尝试在子查询表中计算员工总数。假设计数结果将返回0,但它将继续返回1 如果我尝试只返回员工id和月份,我没有得到任何正确的五月返回值,但每次尝试countdistinct时,我都会得到1作为我的返回值。这是我的sqlSql server COUNT(DISTINCT())返回假值,sql-server,count,distinct,Sql Server,Count,Distinct,我尝试在子查询表中计算员工总数。假设计数结果将返回0,但它将继续返回1 如果我尝试只返回员工id和月份,我没有得到任何正确的五月返回值,但每次尝试countdistinct时,我都会得到1作为我的返回值。这是我的sql SELECT count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN x.employee_id ELSE 0 END)) as test_may FROM(
SELECT
count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN
x.employee_id
ELSE 0 END)) as test_may
FROM(
(
SELECT
h.month,
h.employee_id,
eb.employee_no,
ee.company_code,
h.amount,
h.year,
h.trx_type,
h.trx_code,
v.trx_desc,
h.frequency,
h.run_sequence
FROM
v_employee h,
v_trans v,
employee_emp ee,
employee eb
WHERE
( h.year = 2014 ) AND
( h.employee_id = ee.employee_id ) AND
( ee.employee_id = eb.employee_id ) AND
( h.employee_no = eb.employee_no ) AND
( h.trx_code = v.trx_code ) AND
( h.trx_type = v.trx_type ) AND
( v.company_code = ee.company_code OR v.company_code is NULL) AND
( h.trx_type IN ('S','B','N','O','A','D','L') )
)
)x,
employee_emp ee,
employee eb
WHERE
( x.employee_id = ee.employee_id ) AND
( ee.employee_id = eb.employee_id ) AND
( x.employee_no = eb.employee_no ) AND
( x.year = 2014 )
现在的计数还将对CASE表达式的ELSE子句中的0进行计数。即使使用DISTINCT,仍将计算该0的一个实例
删除ELSE 0,使其为空-不计算在内:
count (distinct(CASE WHEN x.month =5 and x.employee_id <> 0
THEN x.employee_id
END)) as test_may
即使在这两种情况下,您的计数也将返回相同的计数。因为您在这两种情况下都为Count函数提供了值
从
count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN
x.employee_id
ELSE 0 END))
到
Count只将值计数为1,无论值是0还是100&计数时跳过空值。因此,在Else条件下,NULL将为您提供正确的输出。Mysql不是SQL Server,因此我删除了标记计数DISTINCT,而SQL语言也没有损坏。你的数据是什么?你期望什么?你得到了什么?如果返回1行,结果将是1结果取决于您的第二个查询。。最好自己检查一下,没什么问题。您的DISTINCT仅返回值0。然后计算返回的值。只有一个值返回0,所以您有1个值。您是否混淆了计数和求和?即使结果为0,仍然是1结果,因此COUNT0将返回1。你为什么不改为用小组讨论呢?
count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN
x.employee_id
ELSE 0 END))
count (distinct(CASE WHEN (x.month =5 and x.employee_id <> 0) THEN
x.employee_id
ELSE NULL END))