假设我有这张桌子,
A B
-------
1 A
2 C
3 A
4 NULL
5 B
6 A存储过程中只有一个参数。我需要传递一个参数@param。我需要选择所有与A相等的行,或者选择不等于A的所有行。我只有一个参数@param。如果@param = ' A‘选择带A的所有行,如果@param <> 'A’选择不等于A的所有行。
编辑:
这是我找到的一种方法。不确定哪种方法是最佳的。
DECLARE @Param VARCHAR(5)='NOt A'
DECLARE @tbl TABLE(A INT,B VARCHAR(5))
INSERT INTO @tbl(A,B)
VALUES
(1,'A'),
(2,'C'),
(3,'A'),
(4,NULL),
(5,'B'),
(6,'A')
SELECT *
FROM @tbl
WHERE 1 =
(
CASE WHEN @param = 'A'
THEN
(
CASE WHEN B = 'A' THEN 1 ELSE 2 END
)
ELSE
(
CASE WHEN (B IS NULL OR B <> 'A') THEN 1 ELSE 2 END
)
END
) 发布于 2012-02-10 07:49:16
因此,如果我正确地理解了您的意思,您基本上希望选择与A相等的所有行(如果@param的值确实是A )--如果它不是A,则选择所有其他行?
类似于:
CREATE PROCEDURE dbo.SelectRows @Param CHAR(1)
AS
BEGIN
IF @Param = 'A' THEN
SELECT A, B
FROM dbo.YourTable
WHERE B = 'A'
ELSE
SELECT A, B
FROM dbo.YourTable
WHERE B <> 'A' OR B IS NULL
END 发布于 2012-02-10 10:55:28
marc_s建议的方法是最清晰、最容易维护和优化查询的方法。
如果您坚持在一条语句中执行此操作,则可以执行以下操作:
select A, B
from @tbl
where ((@Param='A') and (B='A'))
or ((@Param<>'A') and ((B<>'A') or (B is null)))发布于 2012-02-10 07:55:14
你可以试试这样的东西。请尝试修改此查询,您可能会得到结果。
SELECT A, B
FROM dbo.YourTable
WHERE B IN (CASE WHEN @Param='A' THEN 'A' ELSE
(SELECT B FROM yourTable where B<>'A' OR B IS NULL) END)https://stackoverflow.com/questions/9224373
复制相似问题