返回行的计数,即使sql server为空
我正在尝试执行sql查询以获取每个用户的班次计数 我使用了这个查询:返回行的计数,即使sql server为空,sql,sql-server,Sql,Sql Server,我正在尝试执行sql查询以获取每个用户的班次计数 我使用了这个查询: SELECT COUNT(s.id) AS count, s.user_id FROM sarcuser AS u INNER JOIN sarcshiftpointuser AS s ON s.user_id = u.id INNER JOIN sarcalllevel AS l ON l.id = u.levelid INNER JOIN sarc
SELECT
COUNT(s.id) AS count, s.user_id
FROM
sarcuser AS u
INNER JOIN
sarcshiftpointuser AS s ON s.user_id = u.id
INNER JOIN
sarcalllevel AS l ON l.id = u.levelid
INNER JOIN
sarcshiftpointtable AS t ON t.shift_id = s.shift_id AND s.table_id = t.table_id
WHERE
(s.shift_id + '' LIKE '2')
AND (CAST(s.xdate AS DATE) BETWEEN CAST(N'2014-01-01' AS DATE) AND CAST(N'2015-01-01' AS DATE))
AND (u.gender + '' LIKE N'%')
AND (u.levelid + '' LIKE N'%')
AND (s.point_id + '' LIKE '2')
GROUP BY
s.user_id
ORDER BY
count
它工作得很好。。。但有一个逻辑问题:
当用户没有出现在班次中时,我没有返回计数,我需要它返回0
例如:
user1 user2
shift1 2 2
shift2 5 0
shift3 6 10
但实际上代码返回:
user1 user2
shift1 2 2
shift2 5 10
shift3 6
那是错误的。。。使用此条件和此内部联接,即使计数为零,如何返回计数
表中数据的示例:
sarcuser :
id firstname lastname gender levelid
52 samy sammour male 1
62 ibrahim jackob male 1
71 rebeca janson female 3
sarcalllevel :
id name
1 field leader
2 leader
3 paramdic
sarcshiftpointtable :
id shift_id table_id name_of_shift point_id
1 1 1 shift1 2
2 2 1 shift2 2
3 3 1 shift3 2
4 1 2 shift1 7
5 2 2 shift2 7
6 3 2 shift3 7
sarcshiftpointuser :
id point_id shift_id table_id user_id xdate
1 2 1 1 62 2014-01-05
2 2 1 1 0 2014-01-05
3 2 1 1 71 2014-01-05
4 2 2 1 0 2014-01-05
5 2 2 1 0 2014-01-05
6 2 2 1 52 2014-01-05
7 2 3 1 52 2014-01-05
8 2 3 1 62 2014-01-05
9 2 3 1 71 2014-01-05
10 2 1 1 71 2014-01-06
11 2 1 1 52 2014-01-06
12 2 1 1 0 2014-01-06
13 2 2 1 62 2014-01-06
14 2 2 1 0 2014-01-06
15 2 2 1 52 2014-01-06
16 2 3 1 62 2014-01-06
17 2 3 1 52 2014-01-06
18 2 3 1 71 2014-01-06
如果通过更改班次应用此查询3次,则应返回:
52 62 71
shift1 1 2 2
shift2 2 1 0
shift3 2 2 2
在sarcshiftpointuser的shift2中,未显示用户71
所以当我执行代码时,它将返回到字段而不是三?未返回计数0
52 62 71
shift2 2 1
更具体地说:
我需要将此表导出到excel中,因此当0未返回时,它会给我一个错误的顺序和错误的值(逻辑上)您需要使用IFNULL进行嵌套查询 看看这个 大概
IFNULL(user,0)我认为您指的是交叉表查询。可以使用PIVOT返回结果集。请参考下面的链接
如果您为sarcuser、sarcshiftpointuser、sarcalllevel和sarcshiftpointtable表提供的示例数据很少,那么我们可以为您提供更好的答案。您的示例数据在列中包含用户。您的查询会将用户放入行中。而且,没有换档的输出。您可以编辑您的问题,使示例数据和查询兼容吗?如果您通过更改shift_id来执行此查询3次,我可能会错过这一点,但我需要它在shift_id=2(shift T2)处搜索,它应该返回5-0,但它只返回5,我需要它返回0 alsoSamy,您能否提供sarcuser、sarcshiftpointuser、sarcalllevel和sarcshiftpointtable表中的示例数据。那么我们就很容易理解真正的问题了。坦率地说,您的查询还有许多其他问题。要让查询像您建议的那样崩溃,需要做更多的工作。正如其他人所说,请给我们开始的样本数据。避免只链接答案-至少,您需要提取您认为相关的部分。是的,旋转数据将给出以指定方式格式化的结果;您可以对原始查询进行合理的修改吗?虽然
IFNULL()
(或其标准版本,COALESCE()
)可以在出现null时提供结果,但此处的语句需要进一步修改以利用这一点。目前,根本没有任何行可供调用函数。