在满足一系列条件时查找销售总额

时间:2014-07-15 23:54:36

标签: sql sql-server

我有一个如下所示的数据库表。它包含标识每个事务的密钥(id)。在每个交易中,可能存在多个已购买的商品,因此一些具有交易103的商品具有三个不同的ID值,因为他们购买了三个不同的商品。

这是我想要做的。对于给定的一组条件,我想要购买的商品总数(商品数量)。假设我的条件是商店20和35,和商品7,12,21号,我想找到购买商品的总数(商品数量)。当条件x满足时,这是子查询的原因,将项目数量增加以获得总销售额。

有人可以帮忙吗?

transac id  item_qty   store      item
101     1            2             20         13
102     2            1             35         21
103     3            3             35         16 
103     4            1             35          12
103     5            1             35          7 
104     6            1             15          21
104     7            2              20         7 

我有以下与我的示例相关的查询但是当我在我的数据上使用这样的查询时,它每次都返回一个空值。

SELECT SUM(Cnt) AS "Sales Count"
FROM (SELECT ti.id, SUM(ti.item_qty) AS Cnt
            FROM dbo.vTransactions1 ti
        WHERE ti.store IN (20, 35)
        AND ti.item IN (7, 12, 21)
        GROUP BY ti.id) inner_query1;

3 个答案:

答案 0 :(得分:1)

我不知道为什么这里有子查询。除非我遗漏了什么,否则这应该有效:

select sum (item_qty)
FROM dbo.vTransactions1 ti
    WHERE ti.store IN (20, 35)
    AND ti.item IN (7, 12, 21)

答案 1 :(得分:1)

这样做的一种方法是group by store and item,然后计算总和。这样,如果需要,您可以根据(Store,Item)的有效组合添加更多条件。您按id分组,这是不值得的,因为每一行都有唯一ID,因此不会形成任何组。

对于给定条件,您可以写为;

;with CTE as
( 
  select sum(item_qty) as Cnt,store,item
  from test 
  group by store,item
) 
select sum (Cnt) as [Sales Count]
from CTE
where store in (20,35)
and item in (7,12,21))

SQL Fiddle Demo here.

答案 2 :(得分:0)

如果您需要在外部查询中添加额外条件 - 您需要

  1. 删除" Sum"来自Sum(Cnt),因为Sum已在子查询中完成(并且可能还返回ID); OR
  2. 您还需要将GROUP BY条件添加到外部查询中。