Sql server 2008 r2 根据另一列的值选择列值

Sql server 2008 r2 根据另一列的值选择列值,sql-server-2008-r2,Sql Server 2008 R2,我需要生成一个报告,将“数字”列中的所有空值替换为1到10之间的值,具体取决于另一个“值”列的值,然后将它们相加。有些“数字”已经包括在内,但有些还没有。基本上,这就是我所拥有的- **NUMBER** **VALUE** **DATE** NULL Apple 2012-08-01 NULL Pear 2012-08-01 NULL Banana NULL Apple

我需要生成一个报告,将“数字”列中的所有空值替换为1到10之间的值,具体取决于另一个“值”列的值,然后将它们相加。有些“数字”已经包括在内,但有些还没有。基本上,这就是我所拥有的-

**NUMBER**   **VALUE**    **DATE**
NULL         Apple        2012-08-01
NULL         Pear         2012-08-01
NULL         Banana       
NULL         Apple        2012-08-02
1            Apple        
2            Pear         2012-08-04
3            Banana       2012-08-04
我需要做的是一份这样的报告-

**NUMBER**    **VALUE**    **TOTAL**    **DATE**
1             Apple        3            2
2             Pear         2            2
3             Banana       2            1
SELECT    NUMBER,
          VALUE,
          COUNT (NUMBER) AS TOTAL,
          COUNT (DATE) AS DATE

FROM      MY_TABLE

GROUP BY  NUMBER,
          VALUE
我的问题是,SQL中还有另一个计数,我无法找到一种方法让所有的东西都协同工作。当前的SQL是这样的-

**NUMBER**    **VALUE**    **TOTAL**    **DATE**
1             Apple        3            2
2             Pear         2            2
3             Banana       2            1
SELECT    NUMBER,
          VALUE,
          COUNT (NUMBER) AS TOTAL,
          COUNT (DATE) AS DATE

FROM      MY_TABLE

GROUP BY  NUMBER,
          VALUE

谢谢。

如果我正确理解了您的问题,此查询将返回您想要的总数:

WITH ValueCount AS
(
   SELECT mt.Value, COUNT(1) AS Total
   FROM #My_Table AS mt
   GROUP BY mt.Value
)
, DateCount AS
(
   SELECT mt.Value, COUNT(1) AS DateTotal
   FROM #My_Table AS mt
   WHERE mt.MyDate IS NOT NULL
   GROUP BY mt.Value
)
SELECT mt.Number, vc.Value, vc.Total, dc.DateTotal
FROM ValueCount AS vc
INNER JOIN #My_Table AS mt ON vc.Value = mt.Value
INNER JOIN DateCount AS dc ON vc.Value = dc.Value
WHERE mt.Number IS NOT NULL
ORDER BY mt.Number ASC;
我分解了日期的总值,因为您在寻找不同的标准。如果您不喜欢的外观,可以通过多个查询或子查询来完成

使用CTE时,前面的查询必须以分号结束