SQL从2个查询中划分2个值

SQL从2个查询中划分2个值,sql,sql-server-2005,Sql,Sql Server 2005,我有以下两个问题: SELECT COUNT(cvu.[ID]), 'Exp' AS [Exp] FROM [dbo].[tblClientVehicleUnit] cvu WHERE ExpirationDate < GetDate() AND cvu.Id = '4C1' 我如何在这两者之间划分计数?它总是只返回2个值,一个称为Exp,一个称为NonExp 谢谢试试这个: 选择Query1/Query1 在您的情况下,它将是: select (SELECT

我有以下两个问题:

  SELECT COUNT(cvu.[ID]), 'Exp' AS [Exp]
    FROM [dbo].[tblClientVehicleUnit] cvu
    WHERE ExpirationDate < GetDate()
    AND cvu.Id = '4C1'
我如何在这两者之间划分计数?它总是只返回2个值,一个称为Exp,一个称为NonExp

谢谢

试试这个: 选择Query1/Query1

在您的情况下,它将是:

select (SELECT COUNT(cvu.[ID]), 'Exp' AS [Exp]
FROM [dbo].[tblClientVehicleUnit] cvu
WHERE ExpirationDate < GetDate()
AND cvu.Id = '4C1') / (SELECT COUNT(cvu.[ID]), 'NonExp' AS [Exp]
FROM [dbo].[tblClientVehicleUnit] cvu
WHERE ExpirationDate > GetDate()
AND cvu.Id = '4C1')

基本上将这两个查询视为子查询,如下所示

select x.number / y.number 
from
(
  SELECT COUNT(cvu.[ID]) as number, 'Exp' AS [Exp]     
  FROM [dbo].[tblClientVehicleUnit] cvu     
  WHERE ExpirationDate < GetDate()     
  AND cvu.Id = '4C1' 
) x
join 
(
  SELECT COUNT(cvu.[ID]) as number, 'NonExp' AS [Exp]     
  FROM [dbo].[tblClientVehicleUnit] cvu     
  WHERE ExpirationDate > GetDate()     
  AND cvu.Id = '4C1'
) y on 1=1
如果您想更进一步,那么您可以将cvu.id作为选择和修改连接的一部分,这样您就可以跨所有cvu.id执行此操作

select x.id, x.number / y.number 
from
(
SELECT cvu.id, COUNT(cvu.[ID]) as number, 'Exp' AS [Exp]     
FROM [dbo].[tblClientVehicleUnit] cvu     
WHERE ExpirationDate < GetDate()     
group by cvu.Id 
) x
join 
(
SELECT cvu.id, COUNT(cvu.[ID]) as number, 'NonExp' AS [Exp]     
FROM [dbo].[tblClientVehicleUnit] cvu     
WHERE ExpirationDate > GetDate()     
group by cvu.Id 
)y on x.id = y.id

我刚刚做了一件事,展示了如何将两个独立查询的结果进行分割,为了得到一个非零的结果,您必须将它们转换为可分割的数据类型:

WITH 
T1 AS (SELECT DISTINCT COUNT(StudID) as NumA FROM TBL WHERE MetTarget = 'Y'), 
T2 AS (SELECT COUNT( DISTINCT FallScore + SprgScore ) as NumB FROM TBL) 
SELECT CAST(T1.NumA AS FLOAT) / CAST(T2.NumB AS FLOAT) * 100 as PctMetTgt
FROM T1, T2

我需要经验和非经验。这基本上表明有更多的列…在本例中,您是否只选择一列?'Exp'作为[Exp],而'NonExp'作为[Exp]是另一列。确定!你是对的,答案只适用于1列。也许您可以创建一个函数来返回值。请尝试选择convertdecimal,x.number/y.number,然后返回0.469668
select x.id, x.number / y.number 
from
(
SELECT cvu.id, COUNT(cvu.[ID]) as number, 'Exp' AS [Exp]     
FROM [dbo].[tblClientVehicleUnit] cvu     
WHERE ExpirationDate < GetDate()     
group by cvu.Id 
) x
join 
(
SELECT cvu.id, COUNT(cvu.[ID]) as number, 'NonExp' AS [Exp]     
FROM [dbo].[tblClientVehicleUnit] cvu     
WHERE ExpirationDate > GetDate()     
group by cvu.Id 
)y on x.id = y.id
WITH 
T1 AS (SELECT DISTINCT COUNT(StudID) as NumA FROM TBL WHERE MetTarget = 'Y'), 
T2 AS (SELECT COUNT( DISTINCT FallScore + SprgScore ) as NumB FROM TBL) 
SELECT CAST(T1.NumA AS FLOAT) / CAST(T2.NumB AS FLOAT) * 100 as PctMetTgt
FROM T1, T2