0

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

**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

我遇到的问题是 SQL 中还有另一个 COUNT ,我无法找到让所有东西一起工作的方法。当前的 SQL 看起来像这样 -

SELECT    NUMBER,
          VALUE,
          COUNT (NUMBER) AS TOTAL,
          COUNT (DATE) AS DATE

FROM      MY_TABLE

GROUP BY  NUMBER,
          VALUE

谢谢。

4

1 回答 1

1

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

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;

我分手了从日期算起的价值,因为你正在寻找不同的标准。如果您不喜欢Common Table Expression (CTE)的外观,您可以使用多个查询或子查询来完成此操作。

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

于 2012-08-23T15:51:29.300 回答