Sql server SQL将函数应用于多个id行

Sql server SQL将函数应用于多个id行,sql-server,Sql Server,我正在使用SQL Server 2008,并尝试收集表中多行中出现的单个客户数据,我的数据库示例如下: custID | status | type | value ------------------------- 1 | 1 | A | 150 1 | 0 | B | 100 1 | 0 | A | 153 1 | 0 | A | 126 2 | 0 | A

我正在使用SQL Server 2008,并尝试收集表中多行中出现的单个客户数据,我的数据库示例如下:

custID | status | type  | value 
-------------------------
1      | 1      | A     | 150
1      | 0      | B     | 100
1      | 0      | A     | 153
1      | 0      | A     | 126
2      | 0      | A     | 152
2      | 0      | B     | 101
2      | 0      | B     | 103
对于每个custID,我的任务是在任何行的status=1、任何行的type=B以及type=B的所有情况下的平均值中找到一个标志。因此,我的解决方案应该如下所示:

custID | statusFlag | typeFlag  | valueAv 
-------------------------------------------
1      | 1          | 1         | 100
2      | 0          | 1         | 102
我可以使用大量的row_number()over(partition by..)来创建id,并为每一列创建子表来选择所需的id。我的问题是,这种方法既麻烦又耗时,因为我有比上面显示的更多的列来完成这项工作,还有许多表要重复它。我的理想解决方案是定义自己的aggregate()函数,这样我就可以:

select custID, ag1(statusFlag), ag2(typeFlag)
group by custID

但据我所知,定制聚合不能在SQL server中定义。有没有更好的通用方法来解决这个问题,不需要定义很多id

评估值并相应应用聚合函数的用例

select  custID,
        statusFlag  = max(status),
        typeFlag    = max(case when type = 'B' then 1 else 0 end),
        valueAv     = avg(case when type = 'B' then value end)
from    samples
group by custID

1102
从何而来?类型标志
背后的逻辑是什么?为什么输出中的两条记录都有1作为
typeFlag
?这正是我想要的,谢谢!