Sql 从视图调用用户函数
我有4个独立的用户函数,需要根据另一列(State)的值调用它们。我可以让它工作时,我把用户功能后,选择,但我需要它被放置后,有 代码如下:Sql 从视图调用用户函数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有4个独立的用户函数,需要根据另一列(State)的值调用它们。我可以让它工作时,我把用户功能后,选择,但我需要它被放置后,有 代码如下: SELECT Fname, Lname, id, State, TotalWedThurMins, StCode FROM dbo.AnnualRegCredits GROUP BY Fname, Lname, id, State, TotalWedThurMins, StCode HAVING (State = 'HI') A
SELECT Fname, Lname, id, State, TotalWedThurMins, StCode
FROM dbo.AnnualRegCredits
GROUP BY Fname, Lname, id, State, TotalWedThurMins, StCode
HAVING (State = 'HI')
AND (dbo.roundnearestquarter(SUM(TotalWedThurMins)) > 0)
有什么建议吗?当然有
用于聚合后(如分组后)过滤<代码>总和(TotalWedThurMins)是一个集合。因此,使用SUM作为参数的udf进入了无位置
SUM(totalwedturmins)
在WHERE子句中未定义且无意义
但是,状态
不是聚合的,可以在WHERE子句中
看起来是这样的。但为什么要分组,然后求和?也许你需要一个OVER子句来管理这两个。。。(不确定这是否是有效语法)
一种替代配方,使用过多和一个CTE:
WITH CTE AS
(
SELECT Fname, Lname, id, State, TotalWedThurMins, StCode,
SUM(TotalWedThurMins) OVER () AS SumTotalWedThurMins
FROM dbo.AnnualRegCredits
WHERE State = 'HI'
)
SELECT
Fname, Lname, id, State, TotalWedThurMins, StCode
FROM
CTE
WHERE
dbo.roundnearestquarter(SumTotalWedThurMins) > 0
当然
用于聚合后(如分组后)过滤<代码>总和(TotalWedThurMins)是一个集合。因此,使用SUM作为参数的udf进入了无位置
SUM(totalwedturmins)
在WHERE子句中未定义且无意义
但是,状态
不是聚合的,可以在WHERE子句中
看起来是这样的。但为什么要分组,然后求和?也许你需要一个OVER子句来管理这两个。。。(不确定这是否是有效语法)
一种替代配方,使用过多和一个CTE:
WITH CTE AS
(
SELECT Fname, Lname, id, State, TotalWedThurMins, StCode,
SUM(TotalWedThurMins) OVER () AS SumTotalWedThurMins
FROM dbo.AnnualRegCredits
WHERE State = 'HI'
)
SELECT
Fname, Lname, id, State, TotalWedThurMins, StCode
FROM
CTE
WHERE
dbo.roundnearestquarter(SumTotalWedThurMins) > 0
您还可以在一篇好文章中使用APPLY操作符来解释用法和选项。通过“应用”操作符,可以将表连接到特定类型的函数 您还可以在一篇好文章中使用APPLY操作符来解释用法和选项。通过“应用”操作符,可以将表连接到特定类型的函数 你能更详细地解释一下这个问题吗?我认为你应该把
HAVING(State='HI')
改为WHERE(State='HI')
。是的,每个状态都必须四舍五入HI'必须四舍五入到最近的四分之一(.25)。FL必须四舍五入到最接近的半小时(.5)。我已经创建并运行了所有函数,但我一直在努力使它们与我视图中的每个状态相匹配。有意义吗?你能更详细地解释一下这个问题吗?我认为你应该把的HAVING(State='HI')
改为的WHERE(State='HI')
。是的,每个状态都必须四舍五入HI'必须四舍五入到最近的四分之一(.25)。FL必须四舍五入到最接近的半小时(.5)。我已经创建并运行了所有函数,但我一直在努力使它们与我视图中的每个状态相匹配。有意义吗?谢谢,那会有用的,但我需要一些不同的东西。我发布了错误的代码。以下代码适用于两种状态(HI和FL)。但是,我需要一个不同的MD函数。如何在同一视图中调用不同的函数:选择Fname、Lname、id、State、dbo.GetRoundDownNearestQuarter(TotalWedturmins)作为Expr1,StCode来自dbo.AnnualRegCredits,其中(State='HI')或(State='FL')GROUP BY Fname、Lname、id、State、totalWedturmins、StCodeGreat Union都起作用!谢谢像往常一样,简单的事情永远不会先想到!谢谢,那会有用的,但我需要一些不同的东西。我发布了错误的代码。以下代码适用于两种状态(HI和FL)。但是,我需要一个不同的MD函数。如何在同一视图中调用不同的函数:选择Fname、Lname、id、State、dbo.GetRoundDownNearestQuarter(TotalWedturmins)作为Expr1,StCode来自dbo.AnnualRegCredits,其中(State='HI')或(State='FL')GROUP BY Fname、Lname、id、State、totalWedturmins、StCodeGreat Union都起作用!谢谢像往常一样,简单的事情永远不会先想到!