使用强制转换SQL Server 2005除以两个计数
我有一个计数,根据日期范围,我将其除以,得到每个月的百分比。我遇到的问题是,我编码的方式给了我输入的整个日期范围的百分比。例如,每个月将是54%,而不是每个月唯一的百分比。我相信有一个简单的解决办法,我只是不知道它是什么。我想我让事情变得比需要的更复杂了使用强制转换SQL Server 2005除以两个计数,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我有一个计数,根据日期范围,我将其除以,得到每个月的百分比。我遇到的问题是,我编码的方式给了我输入的整个日期范围的百分比。例如,每个月将是54%,而不是每个月唯一的百分比。我相信有一个简单的解决办法,我只是不知道它是什么。我想我让事情变得比需要的更复杂了 SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, finspectdata), 0) AS 'Date' ,COUNT(*) AS Lots ,sum(flotSize) as 'Lot Size' ,sum(
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, finspectdata), 0) AS 'Date'
,COUNT(*) AS Lots
,sum(flotSize) as 'Lot Size'
,sum(fnumreject) as Rejected
,sum(fsampSize) as 'Sample Size'
,((select cast(count(*) as decimal)
from monthlyinspect
where finspectData < fddue_date
and fddue_date >= '20140101'
and fddue_date <= '20140531') / (select cast(count(*) as decimal)
from monthlyinspect
where fddue_date > '20140101'
and fddue_date < '20140531'))
FROM monthlyinspect
WHERE finspectdata >= '20140101'
AND finspectdata <= '20140531'
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, finspectdata), 0)
Order by 'Date'
如果我理解这个问题,那么我想这就是你想要做的
SELECT
DATEADD(MONTH, DATEDIFF(MONTH, 0, finspectdata), 0) AS 'Date'
, COUNT(*) AS Lots
, SUM(flotSize) as 'Lot Size'
, SUM(fnumreject) as Rejected
, SUM(fsampSize) as 'Sample Size'
, SUM(CASE
WHEN finspectdata < fddue_date
AND
fddue_date >= '20140101'
AND
fddue_date <= '20140531'
THEN
1
ELSE
0
END)
/
SUM(CASE
WHEN
fddue_date >= '20140101'
AND
fddue_date <= '20140531'
THEN
1
ELSE
0
END)
FROM
monthlyinspect
WHERE
finspectdata >= '20140101'
AND
finspectdata <= '20140531'
GROUP BY
DATEADD(MONTH, DATEDIFF(MONTH, 0, finspectdata), 0)
ORDER BY
'Date'
选择
DATEADD(月,DATEDIFF(月,0,finspectdata),0)作为“日期”
,计数(*)为批次
,总和(flotSize)为“批量”
,被拒绝的金额(fnumreject)
,和(fsampSize)作为“样本大小”
,SUM(大小写)
当finspectdata<到期日
和
到期日>='20140101'
和
FDU到期日='20140101'
和
FDU到期日='20140101'
和
finspectdata百分比刚刚变为零。如果您拆分除法部分,并在结果集中以单独字段的形式返回这两个组件,以查看返回的内容,该怎么办。我最终添加了一个临时表来存储我的数字,并从中进行了计算。我发现,对于类似这样的查询,最好将其拆分分成小块,并将结果组合在一起。没有任何数据来测试这一点,很难给你一个完整的解决方案。但很高兴你最终成功了。
SELECT
DATEADD(MONTH, DATEDIFF(MONTH, 0, finspectdata), 0) AS 'Date'
, COUNT(*) AS Lots
, SUM(flotSize) as 'Lot Size'
, SUM(fnumreject) as Rejected
, SUM(fsampSize) as 'Sample Size'
, SUM(CASE
WHEN finspectdata < fddue_date
AND
fddue_date >= '20140101'
AND
fddue_date <= '20140531'
THEN
1
ELSE
0
END)
/
SUM(CASE
WHEN
fddue_date >= '20140101'
AND
fddue_date <= '20140531'
THEN
1
ELSE
0
END)
FROM
monthlyinspect
WHERE
finspectdata >= '20140101'
AND
finspectdata <= '20140531'
GROUP BY
DATEADD(MONTH, DATEDIFF(MONTH, 0, finspectdata), 0)
ORDER BY
'Date'