用户定义函数的t-sql COUNT返回值

时间:2010-07-08 18:25:44

标签: sql-server tsql sql-server-2008

我的CTE如下(逻辑删除)

;with cte_a as
(
    select ID, Count(AnotherID) as Counter
    from Table_A
    group by ID
)

和用户定义的函数,它将Id作为输入并返回一个表。

udf_GetRelatedItemIds(@Id)

我想只计算cte_a中每个ID的用户定义函数返回的相关项ID的数量。

我正在尝试类似下面的内容,但它不起作用

;with cte_a as
(
    select ID, Count(AnotherID) as Counter
    from Table_A
    group by ID
)
select 
ID, 
Count(select RelatedId from udf_GetRelatedItemIds(ID))
from cte_a

请提出解决方案。

2 个答案:

答案 0 :(得分:2)

怎么样?
with cte_a as
(
    select ID, Count(AnotherID) as Counter
    from Table_A
    group by ID
)
select 
a.ID, 
(SELECT COUNT(*) FROM udf_GetRelatedItemIds(a.ID)) as IntersectCount
from cte_a a

答案 1 :(得分:0)

SELECT
    T.ID,
    (SELECT COUNT(RelatedId) FROM udf_GetRelatedItemIds(T.ID)) AS cnt
FROM
    Table_A T
GROUP BY
    T.ID

警告!!! 这里的性能可能很糟糕,因为它需要为Table_A中的每一行运行一次该函数。如果您可以在视图中重新创建功能逻辑,该视图可以为您提供所有ID的结果,那么您可能会感觉更好。