Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回行的计数,即使sql server为空_Sql_Sql Server - Fatal编程技术网

返回行的计数,即使sql server为空

返回行的计数,即使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

我正在尝试执行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
   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时提供结果,但此处的语句需要进一步修改以利用这一点。目前,根本没有任何行可供调用函数。