Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何封装语句并按ORDERBY子句使用它_Sql_Sql Server 2008_Tsql - Fatal编程技术网

Sql 如何封装语句并按ORDERBY子句使用它

Sql 如何封装语句并按ORDERBY子句使用它,sql,sql-server-2008,tsql,Sql,Sql Server 2008,Tsql,我需要封装这个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

我需要封装这个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);
我使用了一个表并连接它,然后使用ORDERBY子句。
如何使用函数实现这一点?

除了为您的订购创建要加入的查找表之外,我认为函数或重复代码是您唯一的选择。但是,通常您希望避免调用函数,因为它们不仅会为每一行生成单独的调用,这会降低查询性能

如果您的数据集始终是一个小的汇总表(从命名约定和要求来看),那么这可能不是一个大的权衡

要创建函数,请执行以下操作:

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]);

在性能方面,我应该选择哪个选项,加入另一个具有我需要的序列或上述函数的表?在性能方面,我应该选择哪个选项,加入另一个具有我需要的序列或上述函数的表?@Ruchi您需要在自己的环境中测试这一点,创建这两个选项,并查看哪个性能更好。如果你不知道该找什么,我强烈建议你通读这里的信息:特别是第2节。