我需要将两个计数语句组合成一个选择。可以这样做吗?
select dealer
,firstname
,ProductType
,date
,Comments
,COUNT(*) as Total
select dealer
,firstname
,Valid
,Comments
,COUNT(*) as InvalidTotal
您可以使用 UNION 语句创建一个查询,该查询将返回两行。但是,count(*) 列的列名将来自第一个查询,因此您可以添加一个标志,例如下面示例中的 IsValid 列
select VR.Dealerid
,VR.commissionrunid
,VD.ProductType
,VD.Valid
,VD.Comments,
1 as IsValid,
,COUNT(*) as Total
UNION ALL
select VR.Dealerid
,VR.commissionrunid
,VD.Valid
,VD.Comments
0 as IsValid,
,COUNT(*) as InvalidTotal
但是,如果您正在寻找一行,即
select VR.Dealerid
,VR.commissionrunid
,VD.ProductType
,VD.Valid
,VD.Comments,
,COUNT(*) as Total
,COUNT(*) as InvalidTotal.
然后我们需要看看您如何确定有效与无效以进行计数。这绝对是可行的,您需要创建一个返回 1 或 0(有效或无效)的 CASE 语句并对这些列求和。在不知道您的 SQL 方言的情况下,以下是伪代码表示。
SUM (CASE isValid='Y' then 1 else 0 END) as TotalValid,
SUM (CASE isValid='N' then 1 else 0 END) as TotalInValid,