我需要封装这个case语句并简化我的查询,因为我需要使用多个临时表生成报告。我不想在每个地方使用案例陈述。
Select * from #SumED_DB
order by case
when [type] = 'Within 30 days' then 1
when [type] = 'Within 60 days' then 2
when [type] = 'Within 90 days' then 3
when [type] = 'Within 120 days' then 4
when [type] = 'Greater than 120 days' then 5
when [type] = 'Blank' then 6
else 7
end
如何解决此问题?我知道功能对我有帮助,但我将如何实现呢?
我希望我的查询看起来像:
select * from #SumED_DB order by (function);
我已经使用了一个表并加入了它,然后使用了order by子句。 我怎么能用函数做到这一点?
答案 0 :(得分:2)
除了创建要加入的查找表以进行排序之外,我认为函数或重复代码是您唯一的其他选项。通常,您希望避免调用函数,因为它们不仅会为每一行they also prohibit parallelism生成单独的调用,这会降低您的查询性能。
如果您的数据集始终是一个小的汇总表 - 因为这看起来来自您的命名约定和要求 - 这可能不是那么大的折衷。
创建你的功能:
create function dbo.usp_TypeOrder (@Type nvarchar(100))
returns int
as
begin
return (select case @Type
when 'Within 30 days' then 1
when 'Within 60 days' then 2
when 'Within 90 days' then 3
when 'Within 120 days' then 4
when 'Greater than 120 days' then 5
when 'Blank' then 6
else 7
end
)
end;
并在您的查询中使用它:
select *
from #SumED_DB
order by dbo.usp_TypeOrder([type]);