SQLSERVER 自定义函数里的group by里内嵌case when问题
自定义函数拟实现功能:按照固定的入参值以表形式返回分组聚合后的结果.
例如:源表中有三个属性字段,客户,所属省份,所属市,和一个销量字段,通过输入三个参数实现分组聚合后的统计客户+省份的销量/客户+市的销量结果,入参1为客户;2为省/市;3为标识字段2是省还是市的字段。
已试用方法:
①表值函数,通过动态语句拼接,case when 实现select后所需字段、group by 需排序字段,但是编译不成功,查了是函数内不支持动态拼接语句???
②直接使用case when 筛选所需字段,此方法测试时,将sql单拉出来 赋值,执行成功,函数编译成功,但是调用时总是失败。
DECLARE @CustomerId VARCHAR(50)
DECLARE @ProCity VARCHAR(50)
DECLARE @deepth INT
SET @CustomerId='C4E6FE23-D9E7-4C84-B721-098B01C72061'
SET @ProCity='AF2B0EC0-747C-49F2-8F42-9F673AE8A69B'
SET @deepth=1
SELECT t.CustomerId,CASE @deepth
WHEN 1 THEN t.ProId
WHEN 2 THEN t.CityId
END AS factor,
SUM(t.mount) as Count_All
CAST(t.CreateDate AS date) as CreateDate
FROM table t
WHERE t.CustomerId=@CustomerId
AND t.ProId=CASE @deepth WHEN 1 THEN @ProCity WHEN 2 THEN t.ProId END
AND t.CityId=CASE @deepth WHEN 1 THEN t.CityId WHEN 2 THEN @ProCity END
GROUP BY t.CustomerId,
CASE @deepth
WHEN 1 THEN t.ProId
WHEN 2 THEN t.CityId
END,
CAST(t.CreateDate AS date)
编译函数后,调用方法及提示:
SELECT dbo.fn_function('C4E6FE23-D9E7-4C84-B721-098B01C72061','AF2B0EC0-747C-49F2-8F42-9F673AE8A69B',1)
<font color=#FF0000>消息 4121,级别 16,状态 1,第 14 行</font>
<font color=#FF0000>找不到列 "dbo" 或用户定义的函数或聚合 "dbo.fn_function",或者名称不明确。</font>
问题:
① 要在函数内使用动态语句拼接,并返回表值函数,这个可以实现么?
②求排查错误,指点正确方法。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
换了WITH 语句还是不行
更正已解,调用函数写错了,好浪费时间...>_<