SQL查询将2合并为1

SQL查询将2合并为1,sql,Sql,我如何将下面的2个查询合并为1,并使用第4列来计算列计数2和3之间的百分比 Select DISTINCT ASSN, COUNT(REAPING_GROUP_CODE) as TotalGroups FROM ReapingGroups GROUP BY ASSN Order by ASSN Select ASSN, COUNT(REAPING_GROUP_CODE) as Groups FROM ReapingGroups WHERE EXISTS (Select * FROM De

我如何将下面的2个查询合并为1,并使用第4列来计算列计数2和3之间的百分比

Select DISTINCT ASSN, COUNT(REAPING_GROUP_CODE) as TotalGroups
FROM ReapingGroups
GROUP BY ASSN
Order by ASSN


Select  ASSN, COUNT(REAPING_GROUP_CODE) as Groups
FROM ReapingGroups
WHERE  EXISTS (Select * FROM DeliveryTons where reaping_code = REAPING_GROUP_CODE AND remarks = '')
GROUP BY ASSN

我不会尝试写一个具体的例子,因为在撰写本文时,您还没有显示任何示例数据或任何东西,但这里有一种通用技术,您可以使用它将条件计数和无条件计数组合到一个查询中:

select 
    FieldName,
    count(1) -- Unconditional count
    sum(case when /*condition*/ then 1 else 0 end) -- Conditional count
from 
    TableName
group by
    FieldName;

另外,顺便说一句:第一次查询中的
DISTINCT
是多余的,因为您已经在同一个字段上分组,这足以保证每个唯一的
ASSN
值在结果集中只获得一条记录。

这里有点小技巧,但它应该可以让您得到您想要的:

select ASSN, sum(TotalGroups) as TotalGroups, sum(CAST(Groups AS DECIMAL)) / sum(CAST(TotalGroups AS DECIMAL))*100.00 as Percentage
from
(
  (
   Select DISTINCT ASSN, COUNT(REAPING_GROUP_CODE) as TotalGroups, 0 as Groups
   FROM ReapingGroups
   GROUP BY ASSN
  )
  union all    
  (
    Select  ASSN, 0 as TotalGroups, COUNT(REAPING_GROUP_CODE) as Groups
    FROM ReapingGroups
    WHERE  EXISTS (Select * FROM DeliveryTons where reaping_code = REAPING_GROUP_CODE AND remarks = '')
    GROUP by ASSN
  )
) NamedSubQuery
group by ASSN
order by ASSN;

更新您的问题添加适当的数据样本和预期结果。。请回家工作好吗?你试过什么?当你发布代码时,请解释什么不起作用?我得到一个无效的列名'ASSN'无效的列名TotalGroups,Groups以及底部Groups附近的错误语法。嗯,它是否告诉你这些无效列在哪一行?我自己在没有编辑器的情况下执行此操作,因为我无法访问查询中的表。我可能有点输入错误,但总体思路是使用union将两个查询组成一个数据集。然后操纵数据以获得百分比,并使用从该数据集中选择的值对其进行正确分组。Msg 156,级别15,状态1,第17行关键字“group”附近的语法不正确。啊,我忘了命名子查询。编辑后的解决方案有效吗?不,我现在收到:Msg 102,级别15,状态1,第16行“NamedSubQuery”附近的语法不正确。