检查是否有客户购买了所有商品,如果购买了所有商品,请将列数据重置为0

时间:2014-12-05 15:18:43

标签: sql sql-server

需要查询帮助。

我需要检查并查看客户是否购买了列表中的所有商品,如果他们已经购买了所有商品,我想将仅为该客户重复的次数购买列重置为零。表看起来像这样

customerId   | productId    | timesPurchased 
-------------------------------------------------------
A            | 000000001    | 1
A            | 000000002    | 1
A            | 000000003    | 0
B            | 000000001    | 1
B            | 000000002    | 1
B            | 000000003    | 3

在此示例中,只有客户B购买了所有这三个项目,因此我只想重置客户B,timesPurchased列回零。

逻辑是,找到已购买所有商品的客户,然后将timesPurchased计数器重置为零。

3 个答案:

答案 0 :(得分:0)

也许这就是:

SELECT * FROM TableName t
WHERE NOT EXISTS
(
    SELECT 1 FROM TableName t1
    WHERE t.customerId= t1.customerId   
    AND   t1.timesPurchased = 0
)

所以更新:

UPDATE t SET timesPurchased = 0
FROM TableName t
WHERE NOT EXISTS
(
    SELECT 1 FROM TableName t1
    WHERE t.customerId= t1.customerId   
    AND   t1.timesPurchased = 0
)

答案 1 :(得分:0)

update your_table
set timesPurchased = 0
where customerId in
(
  select customerId
  from your_table
  group by customerid
  having count(distinct productId) = (select count(distinct productId) from your_table) 
)

答案 2 :(得分:0)

已经有了一些答案,但这些答案有点不同,所以我会把它扔到一堆:

UPDATE <table> 
SET timesPurchased = 0
WHERE customerID IN
    (
        SELECT customerID
        FROM <table>
        WHERE
            sum(CASE WHEN timesPurchased > 0 THEN 1 ELSE 0 END) = count(productID)
        GROUP by customerID
    )

这将测试timesPurchased的总和等于表中productID的计数。如果它们相等,则子查询返回客户。如果客户返回主查询,那么它会将该时间设置为0,以获取该客户的所有记录。