我需要生成一个报告,并将“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
感谢。
答案 0 :(得分: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时,前面的查询必须以分号结尾。