出于某种原因,我的查询只返回26行而不是69行。它省略了数量为零的所有行。我认为WHERE
子句存在问题。我写了那个淫秽的行,因为我不知道如何根据这两个场景中的一个让查询返回值:
用户提供数量 - >仅返回具有该数量的行
用户未提供数量 - >返回所有数量
如果用户没有提供值并且还可能清理我的非最佳WHERE
子句,我怎样才能使查询返回所有行?
DECLARE @lp varchar(30) = '1250116'
DECLARE @qty decimal
SELECT
t.lp_num,
t.qty
FROM
ISW_LPTrans AS t
WHERE
((t.qty >-5000000000 AND t.qty < 5000000000))
第二次尝试:这个没有工作,但它仍然只返回26行。 编辑:抱歉!从上面复制了查询,但忘了改变我摆弄的那条线!
DECLARE @lp varchar(30) = '1250116'
DECLARE @qty decimal = NULL;
SELECT
t.lp_num,
t.qty
FROM
ISW_LPTrans AS t
WHERE
(@qty IS NULL OR t.qty = @qty)
答案 0 :(得分:1)
我不完全确定你想要什么,因为你的编辑已经改变了几次的含义,但是你可以在你的where子句中构建一个case语句并测试你的条件。
DECLARE @lp varchar(30) = '1250116'
DECLARE @qty decimal
SELECT
t.lp_num,
t.qty
FROM
ISW_LPTrans AS t
WHERE
(CASE
WHEN @qty IS NULL THEN 1
WHEN t.qty = @qty THEN 1
ELSE 0
END) = 1
答案 1 :(得分:0)
您需要做的是使用T-SQL IF ELSE子句。
这是官方的T-SQL规范 https://msdn.microsoft.com/en-us/library/ms182717.aspx
在您的情况下,您需要执行以下操作:
DECLARE @qty decimal = 11.00 or
DECLARE @qty decimal = null
IF @qty IS NULL
SELECT
t.lp_num,
t.qty
FROM
ISW_LPTrans AS t
ELSE
SELECT
t.lp_num,
t.qty
FROM
ISW_LPTrans AS t
WHERE t.qty = @qty
答案 2 :(得分:0)
尝试运行此查询:
SELECT t.lp_num, t.qty from ISW_LPTrans AS t
where ISNULL(t.qty,'') = '' or t.qty = @qty