Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 2005,年初至今每月计数,按供应商分组,并在结果中包含计数为零时_Sql_Sql Server 2005 - Fatal编程技术网

SQL Server 2005,年初至今每月计数,按供应商分组,并在结果中包含计数为零时

SQL Server 2005,年初至今每月计数,按供应商分组,并在结果中包含计数为零时,sql,sql-server-2005,Sql,Sql Server 2005,我有一个问题,我正在计算任何给定客户每月的年初至今报告的不同索赔数量。但我发现,如果客户在这一年中没有任何索赔(因此每个月应显示为0),那么客户根本不会出现在结果集中。我需要客户端显示当月的“0”计数。有人知道怎么做吗?谢谢你的帮助!:) 我的查询类似于: Select c.client_name, SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 1 THEN 1 ELSE 0 END) AS [Jan-13], SUM(CASE DATEPART

我有一个问题,我正在计算任何给定客户每月的年初至今报告的不同索赔数量。但我发现,如果客户在这一年中没有任何索赔(因此每个月应显示为0),那么客户根本不会出现在结果集中。我需要客户端显示当月的“0”计数。有人知道怎么做吗?谢谢你的帮助!:)

我的查询类似于:

Select c.client_name,
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 1 THEN 1 ELSE 0 END) AS [Jan-13],
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 2 THEN 1 ELSE 0 END) AS [Feb-13],
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 3 THEN 1 ELSE 0 END) AS [Mar-13] etc.....
   From Client c (Nolock)
          inner join claim c2 (nolock)
          on c.client_id = c2.client_id
   Where c.client_id IN (1,3,4,5,7) AND
   c2.DateField between '001-01-2013' and Getdate()
   GROUP BY c.client_name
   ORDER BY c.Client_name
我的结果如下:

Client Name|Jan-13|Feb-13|Mar-13|etc.....
abc company|12    |17    |0     |etc......
zzz company|3     |0     |15    |etc...
Client Name|Jan-13|Feb-13|Mar-13|etc.....
abc company|12    |17    |0     |etc......
rad company|0     |0     |0     |etc.....
zzz company|3     |0     |15    |etc...
我需要的结果如下所示:

Client Name|Jan-13|Feb-13|Mar-13|etc.....
abc company|12    |17    |0     |etc......
zzz company|3     |0     |15    |etc...
Client Name|Jan-13|Feb-13|Mar-13|etc.....
abc company|12    |17    |0     |etc......
rad company|0     |0     |0     |etc.....
zzz company|3     |0     |15    |etc...

您正在使用
内部联接
,它将仅在索赔表中存在匹配记录时才返回客户表中的记录,并将其替换为
左侧外部联接
,它将根据WHERE子句和索赔表列中的联接提供客户表中的所有记录

此查询将加入,然后进行筛选

Select c.client_name,
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 1 THEN 1 ELSE 0 END) AS [Jan-13],
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 2 THEN 1 ELSE 0 END) AS [Feb-13],
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 3 THEN 1 ELSE 0 END) AS [Mar-13] 
   etc.....
   From Client c (Nolock)
          left outer join claim c2 (nolock)
          on c.client_id = c2.client_id
   Where c.client_id IN (1,3,4,5,7) AND
   ( c2.DateField between '01-01-2013' and Getdate() OR c2.DateField IS NULL )
   GROUP BY c.client_name
   ORDER BY c.Client_name
或者此查询将在以下情况之前筛选索赔行——

Select c.client_name,
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 1 THEN 1 ELSE 0 END) AS [Jan-13],
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 2 THEN 1 ELSE 0 END) AS [Feb-13],
   SUM(CASE DATEPART(MONTH,c2.DateField)WHEN 3 THEN 1 ELSE 0 END) AS [Mar-13] 
   etc.....
   From Client c (Nolock)
          left outer join claim c2 (nolock)
          on c.client_id = c2.client_id 
              AND c2.DateField between '01-01-2013' and Getdate()
   Where c.client_id IN (1,3,4,5,7)
   GROUP BY c.client_name
   ORDER BY c.Client_name
这可能有用

Select
    c.client_name,
    Sum(Case Month(c2.DateField) When 1 Then 1 Else 0 End) As [Jan-13],
    Sum(Case Month(c2.DateField) When 2 Then 1 Else 0 End) As [Feb-13],
    Sum(Case Month(c2.DateField) When 3 Then 1 Else 0 End) As [Mar-13],...
From 
    Client c With (Nolock)
        left outer join 
    Claim c2 With (nolock)
        On c.client_id = c2.client_id And
           c2.DateField between '01-01'2013' and GetDate() -- putting it here makes the outer join apply after the filter
Where 
    c.client_id IN (1,3,4,5,7)
Group By
    c.client_name
Order By 
    c.Client_name

否则,您需要在筛选声明的子查询上保留外部联接。无论哪种方法,诀窍都是确保在外部表上的筛选器之后应用左外部联接。

非常感谢@Lobo,我也尝试了左外部联接,但仍然无法获得该年零记录的客户机。这两位失踪的客户没有2013年的任何记录,因此没有任何记录可查。但我仍然需要每个月显示0(@Montwill我更改了查询。如果没有索赔行,
DateField
将为空。