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