Sql server 2008 r2 根据另一列的值选择列值
我需要生成一个报告,将“数字”列中的所有空值替换为1到10之间的值,具体取决于另一个“值”列的值,然后将它们相加。有些“数字”已经包括在内,但有些还没有。基本上,这就是我所拥有的-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
**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时,前面的查询必须以分号结束