2017-03-09 139 views
0

我怎么能合并低于2次的查询1第4栏之间列计数2和3SQL查询合并成2 1

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 
+0

更新您的问题添加适当的数据样本和预期的结果..请 – scaisEdge

+0

家庭作业?你有什么尝试?当你发布你的代码时,请解释什么是不工作? –

回答

0

我不会尝试写一个具体的例子来计算百分比,因为在写这篇文章的时候,你还没有表现出任何的样本数据或任何东西,但这里是你可以用一个有条件的计数和无条件计数合并成一个单一查询的一般技术:

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

而且,就像旁边一样:您的第一个查询中的DISTINCT是多余的,因为您已经在同一个字段上进行了分组,这足以保证每个唯一的ASSN值在结果集中只有一条记录。

1

这里一个黑客位,但它应该得到你在找什么:

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; 
+0

Im得到一个无效的列名'ASSN'无效的列名TotalGroups,组以及在底部组附近的语法不正确 – ivias

+0

嗯,它告诉你那些无效列在哪一行?这样做没有编辑自己,因为我没有访问您的查询中的表。我可能错误地输入了一些内容,但总的想法是使用联合将两个查询形成单个数据集。然后操纵您的数据以获取百分比,并使用该数据集中的选择重新正确分组。 – user681574

+0

Msg 156,Level 15,State 1,Line 17 关键字'group'附近的语法不正确。 – ivias