SQL:为什么我的查询没有返回零数量的值?

时间:2016-07-21 16:51:51

标签: sql sql-server-2008

出于某种原因,我的查询只返回26行而不是69行。它省略了数量为零的所有行。我认为WHERE子句存在问题。我写了那个淫秽的行,因为我不知道如何根据这两个场景中的一个让查询返回值:

  1. 用户提供数量 - >仅返回具有该数量的行

  2. 用户未提供数量 - >返回所有数量

  3. 如果用户没有提供值并且还可能清理我的非最佳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)
    

3 个答案:

答案 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