Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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_Tsql - Fatal编程技术网

Sql 一次查询中的百分比

Sql 一次查询中的百分比,sql,tsql,Sql,Tsql,我尝试将这两个查询组合起来以生成一个百分比值 SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) AS rdate, COUNT(*) as sum FROM TBL where regdate > '2013-02-21' GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) ORDER BY rdate DESC SELECT DATEADD(dd, 0, DATEDIF

我尝试将这两个查询组合起来以生成一个百分比值

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) AS rdate, 
       COUNT(*) as sum 
FROM TBL where regdate > '2013-02-21' 
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) 
ORDER BY rdate DESC 

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, slutdatum)) AS sdate, 
       COUNT(*) as sum 
FROM TBL 
WHERE slutdatum > '2013-02-21' 
GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, slutdatum))       
ORDER BY sdate DESC
但我真的不明白。我尝试了如下所示的方法,但这只会产生一个错误,两个查询自己工作;我可以分别运行查询,并在得到值后进行计算,但这只会使计算过度

SELECT (SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) AS rdate, count(*) as sum 
        FROM TBL where regdate > '2013-02-21' 
        GROUP BY DATEADD(dd, 0, DATEDIFF(dd, 0, regdate)) 
        ORDER BY rdate DESC) / (select DATEADD(dd, 0, DATEDIFF(dd, 0, slutdatum)) AS sdate,    
COUNT(*) as sum from TBL where slutdatum > '2013-02-21' 
GROUP BY DATEADD(dd, 0,    
DATEDIFF(dd, 0, slutdatum)) ORDER BY sdate DESC) * 100 from tbl

如何进行一个查询,生成过去7天的两列、日期和百分比?

您可以使用SELECT。。。像一张桌子。所以,尝试选择。。。从选择。。。作为一个选项,请选择。。。作为B


现在,您可以在同一公式中使用A和B的值。

因为您将比较当天发生的事件,所以我们可以在当天加入,但我们需要完全外部加入,以包括只有中断或修复的天数

以下是更新的代码:

SELECT COALESCE(reg.rdate,cl.sdate) as [Date], ISNULL(reg.sum, 0) as [Registered], ISNULL(cl.sum, 0) as [Closed], 
       CASE WHEN cl.sum IS NULL THEN 0
            WHEN ISNULL(cl.sum,0) > ISNULL(reg.sum,0) THEN 100 
            ELSE CONVERT(float,cl.sum)/reg.sum*100 END as [Percentage]  
FROM 

(SELECT regdate AS rdate, COUNT(regdate) as sum 
FROM TBL where regdate > CONVERT(datetime,'20130221',112) 
GROUP BY regdate ) reg 

FULL OUTER JOIN 

(SELECT slutdatum AS sdate, COUNT(slutdatum) as sum 
FROM TBL WHERE slutdatum > CONVERT(datetime,'20130221',112)
GROUP BY slutdatum) cl

ON (reg.rdate=cl.sdate)
ORDER BY COALESCE(reg.rdate,cl.sdate);

我使用测试数据创建了SQL FIDLE,以便您可以使用以下代码进行实验:

请多解释。您到底需要什么输出?为了进行数学运算,您的单个查询需要返回一个值。@Slint-您希望显示哪个日期?您想要rdate=sdate的行的百分比吗?我有一个案例列表。每个获得支持的案例都使用datetime和其他一些东西进行注册。当您关闭案例时,完成时间将与状态“已关闭”一起注册,而不是“新建”或“打开”。我想要一个得到中断/修复比率的查询。所以,假设今天有10个新病例,而我的病例列表中只有三个病例已经结案。那么那天的中断/修复比率将是30%的修复比率。我知道,如果我关闭的案例比收到的案例数量多,则中断/修复比率不起作用,但在这种情况下,我希望中断/修复比率为100%。@PM77-1这两个日期互不相关。一个是注册日期时间,一个是关闭日期时间。这是用日期为2013-03-01的slutdatum统计所有邮政,用日期为2013-03-01的regdate统计所有邮政。取slutdatum closedate/regdate*100=百分比。生成两列,一列为日期,一列为百分比。。。。在没有WHERE子句的情况下,他将得到一个笛卡尔连接;从选择DATEADDdd,0,DATEDIFFdd,0中选择前7个*从选择DATEADDdd,0,DATEDIFFdd,0,regdate作为rdate,从工作TB中计算为regsum,其中regdate>'2013-02-21'按DATEADDdd分组,0,DATEDIFFdd,0,从工作TB中计算为slutsum,其中SlutDateDatum>'2013-02-21'按DATEADDdd分组,0,DATEDIFFdd,0,按rdate DESC将slutdatum列为B订单,但订单被弄乱了,团队也被弄乱了?它不起作用,我真的不知道在哪里调整。它表示无法绑定reg.rdate多部分标识符。然后是一些ISSU,其顺序为INKERRECT语法检查、EXEPT或UNION,当我刚刚开始理解您之前的代码时,您向我展示了这个!哇,这真是我要找的地方。第一个代码是一个很好的例子,它让我在SQL编码方面走得更远了一点。我想我理解它的概念。从上一篇文章中,我还有一些东西要学习。SQL fiddle站点真的很有帮助,正如我所说的,上一段代码非常正确!谢谢你的帮助,PM 77-1!