[英]SQL Server different select statement on same table and different result
[英]SQL Server: how to use if else statement to select different data from same table
我正在使用以下存储过程从到目前为止可以正常工作的表中选择数据。
现在,我想创建两种不同的情况,而不需要重复整个查询:如果输入@selection =“ active”,则选择不等于statusX =“ Published”的所有内容,否则请选择所有与statusX =“ Published”相等的内容。
谁能告诉我如何在这里实现?
我的存储过程(减少的列):
ALTER PROCEDURE [dbo].[FetchRequests]
@selection nvarchar(20)
AS
BEGIN
SET NOCOUNT ON;
SELECT col1,
col2,
col3,
col4,
col5,
statusX,
logStatus,
logID
FROM LogRequests
WHERE logStatus = 'active'
ORDER BY logID desc
FOR XML PATH('cols'), ELEMENTS, TYPE, ROOT('ranks')
END
蒂姆,非常感谢您对此提供的任何帮助。
您可以只使用条件WHERE子句:
ALTER PROCEDURE [dbo].[FetchRequests]
@selection nvarchar(20)
AS
BEGIN
SET NOCOUNT ON;
SELECT col1,
col2,
col3,
col4,
col5,
statusX,
logStatus,
logID
FROM LogRequests
WHERE logStatus = 'active'
AND ((statusX <> 'Published' AND @selection = 'active')
OR (statusX = 'Published' AND @selection <> 'active'))
ORDER BY logID desc
FOR XML PATH('cols'), ELEMENTS, TYPE, ROOT('ranks')
END
在您的WHERE
添加AND
子句:
AND (@selection = 'active') = (StatusX <> 'Published')
(我看到这是其他海报提出的两行的结合。嗯,我想是口味问题:))
怎么样
where
(@selection = 'active' and statusX != 'Published')
or
(@selection != 'active' and statusX = 'Published')
您可以尝试类似
SELECT col1,
col2,
col3,
col4,
col5,
statusX,
logStatus,
logID
FROM LogRequests
WHERE logStatus = 'active'
AND (
(@selection = "active" AND statusX <> "Published")
OR (@selection <> "active" AND statusX = "Published")
)
ORDER BY logID desc
FOR XML PATH('cols'), ELEMENTS, TYPE, ROOT('ranks')
ALTER PROCEDURE [dbo].[FetchRequests]
@selection nvarchar(20)
AS
BEGIN
Declare @query as nvarchar(4000)
@query=
'SET NOCOUNT ON;
SELECT col1,
col2,
col3,
col4,
col5,
statusX,
logStatus,
logID
FROM LogRequests
WHERE logStatus = ''active'' and statusX ' +
Select case when @selection = 'active' then '<>'
else '='
END + '''Published''
ORDER BY logID desc
FOR XML PATH(''cols''), ELEMENTS, TYPE, ROOT(''ranks'')'
execute @query
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.