需要查询帮助。
我需要检查并查看客户是否购买了列表中的所有商品,如果他们已经购买了所有商品,我想将仅为该客户重复的次数购买列重置为零。表看起来像这样
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计数器重置为零。
答案 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,以获取该客户的所有记录。