第一次在这里问一个问题。提前感谢您的帮助。
我主要是一个前端人员,有时会被SQL语法/控制流程绊倒。
我已经编写了一个存储过程,用于指定要传递的参数(@listAll
),该参数指定是否列出表中队列中的所有注册以供查看。
我希望通过IF-ELSE条件运行RQ.Processed
,显示为INT
(0或1),将0或1设置为字符串(不是已处理/已处理)。这将在我们的前端填充数据表,以便我们的客户查看注册队列。
但是,在我尝试添加此条件的任何地方,我都会遇到语法错误。我还假设将用于数据类型转换的变量(@statusConversion
)需要超出select语句的范围,但我可能完全关闭。
这是我到目前为止所做的:
create proc [dbo].[Portal.RegistrationQueue_ListAll]
(@listAll int)
as
set nocount on
declare @statusConversion varchar(30)
if (@listAll = 1)
begin
select
C.CompanyName as 'Company',
RCG.Learner_Tag as 'Registration Group',
convert(varchar(40), RQ.CreatedOn, 110) as 'Date',
RQ.Processed as 'Status'
from
[dbo].[Portal.RegistrationQueue] RQ
join
[dbo].[Portal.Company] C on RQ.CompanyID = C.Id
join
[dbo].[Portal.RegisteredCourseGroup] RCG on RQ.RegistrationGroupID = RCG.Id
end
else
begin
select
C.CompanyName as 'Company',
RCG.Learner_Tag as 'Registration Group',
convert(varchar(40), RQ.CreatedOn, 110) as 'Date',
RQ.Processed as 'Status'
from
[dbo].[Portal.RegistrationQueue] RQ
join
[dbo].[Portal.Company] C on RQ.CompanyID = C.Id
join
[dbo].[Portal.RegisteredCourseGroup] RCG on RQ.RegistrationGroupID = RCG.Id
where
RQ.Processed = 0
end
GO
我需要的是帮助放置IF-ELSE以将(0,1)转换为未经处理的',#39;已处理的'如果我把转换变量放在正确的位置,也是如此。
感谢。
答案 0 :(得分:2)
听起来你只需要使用case语句而不是变量。然后,过程中的select语句将如下所示:
SELECT
C.CompanyName AS [Company],
RCG.Learner_Tag as [Registration Group],
convert(varchar(40), RQ.CreatedOn, 110) as [Date],
CASE WHEN RQ.Processed = 1 THEN 'Processed' ELSE 'Not Processed' END AS [Status] --this will display the text description for status
FROM ...
答案 1 :(得分:0)
在返回的集合中使用以下列作为列:
case RQ.Processed
when 1 then 'Processed'
else 'Not Processed'
end as Status
当RQ.Processed等于1时,返回" Not Processed",当它等于其他任何东西时 - 包括NULL - 它返回" Not Procesed"。
同样地,作为附注,您可以使用where
这样的句子删除IF / ELSE和duplciated查询:
when RQ.Processed = case @listAll
when 1 then RQ.Processed
else 0
end