首页 > 解决方案 > 如何在 SQL Server 中使用数据透视在 count() 中获取“0”

问题描述

我正在SELECT对我的表做一个PIVOT声明。当它MARCA_INCUMP以列[0][1]某些年份计算字段时,它没有记录,我需要它显示零(0)。在它有记录的另一年,它显示没有问题。

SELECT FECHA_SOLICITUD, GRUPO AS GRUPO, [0], [1], 
    ([0]+[1]) AS TOTAL, ([1]*1.0) / ([0]+[1]) AS PD_REAL
FROM (SELECT MARCA_INCUMP, GRUPO, FECHA_SOLICITUD FROM MyTable) AS SourceTable 
PIVOT (
 COUNT(MARCA_INCUMP)
 FOR MARCA_INCUMP IN ([0], [1]) 
) AS PivotTable 
GROUP BY fecha_solicitud, GRUPO, [0], [1]
ORDER BY FECHA_SOLICITUD, GRUPO ASC;

我需要这个

DATE  GRUPO [0] [1] TOTAL           PD
201411  1   0   0   0   0.000000000000
201411  2   30  3   33  0.090909090909
201411  3   89  2   91  0.021978021978
201411  4   82  7   89  0.078651685393
201411  5   185 20  205 0.097560975609
201411  6   129 21  150 0.140000000000
201411  7   70  14  84  0.166666666666
201411  8   40  12  52  0.230769230769
201411  9   38  31  69  0.449275362318
201411  10  10  19  29  0.655172413793

我有这个

DATE  GRUPO [0] [1] TOTAL           PD
201412  2   37  1   38  0.026315789473
201412  3   83  5   88  0.056818181818
201412  4   78  9   87  0.103448275862
201412  5   207 24  231 0.103896103896
201412  6   117 19  136 0.139705882352
201412  7   75  17  92  0.184782608695
201412  8   30  11  41  0.268292682926
201412  9   35  33  68  0.485294117647
201412  10  8   34  42  0.809523809523

标签: sqlsql-servertsqlcountpivot

解决方案


您应该LEFT JOIN在返回所有可能的时期(或组)的查询和您现有的查询之间进行操作。如果可能的期间只是月份数字,您可以在VALUES子句中指定它们。如果可能的组在不同的表中,只需使用该表。


推荐阅读