Sql 具有多个案例和分组依据的条件聚合

Sql 具有多个案例和分组依据的条件聚合,sql,sql-server,tsql,Sql,Sql Server,Tsql,下面的查询提供了QuoteStatusID=6时的平均值,但我在关联“按街道平均值”列时遇到了问题 QuoteTable 报价单 引述 ProjectManager\u用户ID 配送地址ID 1. 6. 12 56 2. 6. 12 56 3. 26 12 56 4. 6. 12 18 5. 26 12 18 你能简单地修改你的平均值吗 select avg(case when QuoteStateID = 6 then 1.0 else 0 end) over(partition by Shi

下面的查询提供了QuoteStatusID=6时的平均值,但我在关联“按街道平均值”列时遇到了问题

QuoteTable

报价单 引述 ProjectManager\u用户ID 配送地址ID 1. 6. 12 56 2. 6. 12 56 3. 26 12 56 4. 6. 12 18 5. 26 12 18
你能简单地修改你的平均值吗

select avg(case when QuoteStateID = 6 then 1.0 else 0 end) over(partition by Shipping_AddressId) as QuoteAccept
编辑 要继续用作子查询,它需要在
Shipping\u AddressId
上的where子句中进行关联,同时也要关联我认为您不需要子查询。只需将
avg
作为查询的一部分,并使用
groupby
为您提供不同的用户和地址

select U.UserID, U.fname, U.lname, U.JobTitle, A.Street
    , avg(case when Q1.QuoteStatusID = 6 then 1.0 else 0 end) as QuoteAccept
from [User] U 
inner join Quote Q on Q.ProjectManager_UserID = U.UserID
inner join [Address] A on A.AddressID = Q.Shipping_AddressID
group by U.UserID, U.fname, U.lname, U.JobTitle, A.Street
order by AcceptanceRate desc;

注意:短别名使查询更具可读性。而且你不需要你的
where
子句,因为
Quote
上的join已经确保了相同的条件。

如果你提供DDL+DML,帮助就容易多了。当然,一秒钟前我尝试了group by,但没有按预期工作。很抱歉耽搁了,我正试图找出如何使用数据生成脚本。目前只允许我生成表脚本,但不允许生成数据..您只需键入上面显示的内容。。。与其我们输入它(因为需要帮助的是您):)好的,关于那个Dale很抱歉,我下次会记住:)嘿,这起作用了,但当合并到我的查询中时,我得到了错误:子查询返回了超过1个值。当子查询在=、!=、=或者当子查询用作表达式时。但是谢谢你的回答,我明白你的意思了did@NebelzCheez如果没有子查询,则在主部分中单击ok。没有数据可供使用的危险;-)这是因为分区现在为每个addressId返回一行。它需要额外的相关性。我会在上面编辑谢谢戴尔,这一切都如期完成了!:)