使用 SQL 过滤 Table 我需要根据另一列对一列的多行求和

Use SQL To Filter Table Where I Need to Sum Multiple Rows Of A Column Based On Another Column

我正在尝试过滤 table,其中有多个行表示一个会员购买商品的每家商店。加上购买的肉类和蔬菜数量 table 的列。我想要一份人员名单以及他们购买肉类 蔬菜 tables.

的所有商店

来源table:

MemberId | StoreId | Meat | Vegegetables 1 11 1 2 1 12 0 1 1 14 1 2 2 12 1 0 3 12 1 0 3 12 1 0 4 11 2 1 4 13 0 1 4 14 0 1

我要应用的过滤器是:

对于 MemberId(跨所有商店):WHERE SUM(Meat) > 0 AND SUM(Vegetables) > 0

所以我正在寻找这个结果 table

MemberId | StoreId | Meat | Vegetables 1 11 1 2 1 12 0 1 1 14 1 2 4 11 2 1 4 13 0 1 4 14 0 1

这让我很困惑,我不知道如何过滤这个 table。

谢谢

这可以使用 sum window 函数来完成。

select * from (
select t.*,sum(meat) over(partition by memberid) as meat_sum,sum(vegetables) over(partition by memberid) as veg_sum
from source_table t
) t
where meat_sum>0 and veg_sum>0

您可以使用 CTE:

;WITH CTE AS
(
    SELECT      MemberID                        ,
                SUM(Meat)       AS  Meat        ,
                SUM(Vegetables) AS  Vegetables
    FROM        Table
    GROUP BY    MemberID
)
SELECT          Table.*
FROM            Table
INNER JOIN      CTE ON CTE.MemberID =   Table.MemberID
WHERE           CTE.Meat > 0 AND CTE.Vegetables > 0;

我能想到的最简单的方法:

   create table #test (MemberID int, StoreID int, Meat int, Vegetables int)

   insert into #test values (1, 11, 1, 2)
   insert into #test values (1, 12, 0, 1)
   insert into #test values (1, 14, 1, 2)
   insert into #test values (2, 12, 1, 0)
   insert into #test values (3, 12, 1, 0)
   insert into #test values (3, 12, 1, 0)
   insert into #test values (4, 11, 2, 1)
   insert into #test values (4, 13, 0, 1)
   insert into #test values (4, 14, 0, 1)

   Select  * 
   from #test 
   where MemberID in (Select MemberId
       from #test
       group by MemberId, storeID
       having sum(Meat)>0 and sum(vegetables)>0)