结合SQL Where子句

时间:2014-05-31 02:15:15

标签: sql

这是我的代码

SELECT sum(qty) as "sumqty", shipdate, groupnumber
from test
where (shipdate = #5/30/2014# and groupnumber = "A30") OR ( shipdate #5/31/2014# and groupnumber ="A31")
group by shipdate, groupnumber
order by sum(qty) desc;

有没有办法缩短where子句?因为我想添加更多的shipdate和groupnumber组合。

3 个答案:

答案 0 :(得分:2)

如果我理解正确,您的问题不是关于当前查询,而是关于扩展查询以包含shipdategroupnumber的更多组合。显然,如果你只需要添加更多这样的组合,那么添加它们并不是什么大不了的事。但是,如果您需要添加许多更多此类组合,请考虑使用连接。

你还没有说过你正在使用哪个数据库服务器和版本,所以我必须尝试一般。

  1. 使用shipdategroupnumber
  2. 创建临时表
  3. 使用WHERE EXISTS子句:

    SELECT sum(qty) as "sumqty", shipdate, groupnumber
    from test
    where exists (
        select shipdate,groupnumber
        from #Temp_Table as tt
        where tt.shipdate = test.shipdate and tt.groupnumber = test.groupnumber)
    group by shipdate, groupnumber
    order by sum(qty) desc;
    

答案 1 :(得分:-1)

删除所有出现的" test。"前缀,因为查询中有一个表。 您可以使用所选字段的短别名。

答案 2 :(得分:-1)

我会创建一个存储过程,然后将不同的发货日期和组号传递给它,然后查询将成为

SELECT sum(qty) as "sumqty", shipdate, groupnumber from test where (shipdate = @ShipDate and groupnumber = @GroupNumber) group by shipdate, groupnumber order by sum(qty) desc;

如果您需要为多组ShipDate / GroupNumber组合获取结果集,则可以根据您的要求将结果统一为UNION或UNION。

请注意,这不是解决此问题的唯一方法,如果您发现需要查询大量组合,常见的表表达式甚至动态SQL可能会表现得更好