在SQL中对多个SELECT结果执行数学运算

在SQL中对多个SELECT结果执行数学运算,sql,sql-server,database,Sql,Sql Server,Database,类似于这个问题 我不能让我的工作 我想确定准时发送的装运的百分比 为此,我知道我必须: 1) 选择已发送的装运总数 Select COUNT(*) AS TotalShipments From tbl_LISC 2) 选择按时发送的总装运量 Select COUNT(*) AS TotalOnTime From tbl_LISC WHERE tbl_LISC.LISC = 100 3) 将2个结果除以100((TotalOnTime/TotalShippings)*100) 我试着以线程的答

类似于这个问题

我不能让我的工作

我想确定准时发送的装运的百分比

为此,我知道我必须:

1) 选择已发送的装运总数

Select COUNT(*) AS TotalShipments From tbl_LISC
2) 选择按时发送的总装运量

Select COUNT(*) AS TotalOnTime From tbl_LISC WHERE tbl_LISC.LISC = 100
3) 将2个结果除以100((TotalOnTime/TotalShippings)*100

我试着以线程的答案为例

SELECT TotalShipped, TotalOnTime, TotalShipped/TotalOnTime as LISC
FROM (SELECT COUNT(Select *From tbl_LISC) AS TotalShipped,
             COUNT(*) as TotalOnTime
          FROM tbl_LISC
          WHERE LISC = 0) 

你真正的问题是整数和浮点数学。当表达式的两个数字都是整数时,结果也将是整数:

select 2/3 -- 0
因此,为了保持十进制精度,只需将表达式中的一个数字设置为十进制/浮点值:

select 2.0/3 -- 0.666666
因此,请试着穿上这个:

select
 sum(iif(tbl_LISC.LISC = 100, 1, 0)) as OnTime
,count(*) as Total
,sum(iif(tbl_LISC.LISC = 100, 1.0, 0.0)) / nullif(count(*), 0) as Percentage
from tbl_LISC as l 

因此,根据第一次查询,
tbl_LISC
表中的所有记录都是“不准时”的,而在那些“不准时”的记录中,
LISC=100
都是准时的?很抱歉,这一条上的名称不对,编辑,它们是发货总数,如果不是100,则被视为延迟请为您正在使用的特定RDBMS添加一个标记:mysql、sql server、oracle、,等等,我现在正在使用SQLServer@Barmar