Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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/25.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 我如何将一个案例的总数除以总总数_Sql_Sql Server_Case When - Fatal编程技术网

Sql 我如何将一个案例的总数除以总总数

Sql 我如何将一个案例的总数除以总总数,sql,sql-server,case-when,Sql,Sql Server,Case When,我有一个代码,它在…时按案例分解计数,但是我需要第三列,它在计数时取案例的结果,然后除以原始总数 我该怎么做呢 代码如下 基本上我需要 每组交易数/交易总数 Select case when t_opportunity.opportunityID=yes.opportunityID then 'Compliant' else 'Non Compliant' end as Compliance, count(t_o

我有一个代码,它在…时按案例分解计数,但是我需要第三列,它在计数时取案例的结果,然后除以原始总数

我该怎么做呢

代码如下

基本上我需要

每组交易数/交易总数

Select case when t_opportunity.opportunityID=yes.opportunityID 
            then 'Compliant' 
            else 'Non Compliant' 
       end as Compliance, 
       count(t_opportunity.opportunityID) as NumberOfDeals
from T_opportunity
left join (select t_O.opportunityId
           from t_opportunity T_O   
           inner join T_quote on T_O.opportunityID=t_quote.OpportunityId
           where t_quote.createddate<=(T_O.applicationsigneddate+7)
           group by t_O.opportunityID
           having count(t_quote.quoteID)>=3) yes 
  on T_opportunity.opportunityID=yes.opportunityID  
group by case when t_opportunity.opportunityID=yes.opportunityID 
              then 'Compliant' 
              else 'Non Compliant' 
         end

提前谢谢你

如果我理解正确的话,这可能是你的窍门。不过,样本数据和预期结果对于数据转换问题总是有帮助的

这假设如果一个opportunity在yes中有多个匹配项,您希望它计数两次或N次。如果不是这样的话,就把一个独特的

SELECT compliance,
       COUNT(1) AS NumberOfDeals,
       COUNT(1)/Total_Count AS FieldYouAreAskingFor  -- Cast accordingly to get precision. 
  FROM (SELECT o.opportunityID, -- Shove distinct here. Or better rewrite as EXIST if you only want to count multiple matches once.
               CASE WHEN yes.opportunityID IS NOT NULL THEN 'COMPLIANT'
                    ELSE 'NOT COMPLIANT'
                END AS Compliance,
               SUM(1) OVER() AS Total_Count
          FROM T_OPPORTUNITY O
          LEFT
          JOIN (select t_O.opportunityId
                   from t_opportunity T_O   
                   inner join T_quote on T_O.opportunityID=t_quote.OpportunityId
                   where t_quote.createddate<=(T_O.applicationsigneddate+7)
                   group by t_O.opportunityID
                   having count(t_quote.quoteID)>=3
               ) yes 
            ON o.opportunityID = yes.opportunityID
       ) TMP
 GROUP
    BY TMP.Compliance,
       TMP.Total_Count;

我将推测您打算:

select (case when t_opportunity.opportunityID = yes.opportunityID 
            then 'Compliant' 
            else 'Non Compliant' 
        end) as Compliance, 
       count(t_opportunity.opportunityID) as NumberOfDeals,
       count(t_opportunity.opportunityID) * 1.0 / sum(count(t_opportunity.opportunityID)) over () as Ratio

这使用了一个窗口函数来计算行的总数。

如果我没有弄错,那么您的Opportunity在一周内创建了至少3个引号,那么您的Opportunity是符合要求的,无论这意味着什么,我想您会理解这一点

您可以在一个查询中计算符合性:

SELECT o.opportunityID,
  CASE 
    WHEN COUNT(q.quoteID) >= 3
    THEN 'Compliant'
    ELSE 'Not Compliant'
  END AS Compliance
FROM T_opportunity o
  LEFT OUTER JOIN t_quote q 
    ON o.opportunityID = q.OpportunityId
    AND DATEADD(day, 7, o.applicationsigneddate) >= q.createddate
GROUP BY o.opportunityID
在下一步中,您可以使用此结果作为按法规遵从性分组的输入:


欢迎来到堆栈溢出!请阅读并阅读,特别是如何提问。你在这里的最佳选择是做你的研究,搜索相关的话题,然后尝试一下。在做了更多的研究和搜索之后,发布一篇你的尝试的文章,并明确指出你的困境,这可以帮助你得到更好的答案。当前的查询有什么问题?向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。样本数据和期望的结果将非常有用。您的大小写表达式正在返回字符串。我看不出这是如何合理地除以任何总数的。这个老问题的状态如何?如果一个人解决了这个问题,这个问题应该通过接受答案来标记。
WITH 
  OpportunityCompliance (opportunityID, Complicance) AS (
    SELECT o.opportunityID,
      CASE 
        WHEN COUNT(q.quoteID) >= 3
        THEN 'Compliant'
        ELSE 'Not Compliant'
      END
    FROM T_opportunity o
      LEFT OUTER JOIN t_quote q 
        ON o.opportunityID = q.OpportunityId
        AND DATEADD(day, 7, o.applicationsigneddate) >= q.createddate
    GROUP BY o.opportunityID
  )
SELECT 
  Complicance,
  COUNT(*) AS NumberOfDeals,
  1.0 * COUNT(*) / SUM(COUNT(*)) OVER () AS Ratio
FROM OpportunityCompliance
GROUP BY Complicance