Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用强制转换SQL Server 2005除以两个计数_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

使用强制转换SQL Server 2005除以两个计数

使用强制转换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(

我有一个计数,根据日期范围,我将其除以,得到每个月的百分比。我遇到的问题是,我编码的方式给了我输入的整个日期范围的百分比。例如,每个月将是54%,而不是每个月唯一的百分比。我相信有一个简单的解决办法,我只是不知道它是什么。我想我让事情变得比需要的更复杂了

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'