在 MS SQL Server 2005 中,我正在编写一个带有条件排序的查询,我的问题是我不知道如何使用两列进行条件排序?
如果我写了这样的代码,它就可以正常工作
select
*
from
table
order by
case @pkr
when 'kol' then kol
when 'nci' then nci
end
Run Code Online (Sandbox Code Playgroud)
我不知道如何对两列或更多列进行条件排序
select
*
from
table
order by
case @pkr
when 'KOL-NCI' then kol,nci
when 'kol-MPCI' then kol,mpci
end
Run Code Online (Sandbox Code Playgroud)
有一个制作动态 TSQL 并使用的想法,sp_executesql
但我仍在寻找更好的想法?
我有以下存储过程,当我将“OrderBy”设置为“OrderNumber”时,该过程非常有效。
我收到以下错误:将 nvarchar 值“SK11270”转换为数据类型 int 时转换失败。
(SK11270 是 OrderNumber 列中的一个值,即 nvarchar(50))
如果我对任何其他 OrderBy 列运行相同的查询,它工作正常。
我完全迷失了,我的头很痛。任何人都可以看到会导致此问题的任何明显内容吗?
提前感谢您的任何想法...
富有的
这有效:
sp_jobs '1','20','','JobNumber','ASC','97','True','True','True','True','True','True','True','True','True','False','True','False','True','False','0'
这不会:
sp_jobs '1','20','','OrderNumber','ASC','97','True','True','True','True','True','True','True','True','True','False','True','False','True','False','0'
PROCEDURE [dbo].[sp_Jobs]
@PageNumber int,
@PageSize int,
@FilterExpression varchar(500),
@OrderBy varchar(50),
@OrderDirection varchar(50),
@CustomerID int,
@ShowNotSet bit,
@ShowPlaced bit,
@ShowProofed bit,
@ShowReProofed bit,
@ShowApproved bit,
@ShowOnTime bit,
@ShowLate bit,
@ShowProblem bit,
@ShowCompleted bit,
@ShowDispatched bit,
@ShowUnapproved bit,
@ShowClosed bit,
@ShowReturned bit,
@ShowNoStock bit,
@UserID int
WITH RECOMPILE
AS
BEGIN
WITH Keys
AS (SELECT TOP (@PageNumber * @PageSize) ROW_NUMBER() …
Run Code Online (Sandbox Code Playgroud)