Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检查是否有任何客户购买了所有项目,如果已购买所有项目,请将列数据重置为0_Sql_Sql Server - Fatal编程技术网

Sql 检查是否有任何客户购买了所有项目,如果已购买所有项目,请将列数据重置为0

Sql 检查是否有任何客户购买了所有项目,如果已购买所有项目,请将列数据重置为0,sql,sql-server,Sql,Sql Server,需要查询帮助 我需要检查并查看客户是否已购买了列表中的所有项目,如果他们已购买了所有项目,我只想将该客户的timesPurchased列重置为零。这张桌子看起来像这样 customerId | productId | timesPurchased ------------------------------------------------------- A | 000000001 | 1 A | 000000002 | 1

需要查询帮助

我需要检查并查看客户是否已购买了列表中的所有项目,如果他们已购买了所有项目,我只想将该客户的timesPurchased列重置为零。这张桌子看起来像这样

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计数器重置为零

也许这是:

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
)

已经有了一些答案,但是这个有点不同,所以我将把它放在一堆上:

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
    )

这将测试购买的时间总和是否等于表中ProductID的计数。如果它们相等,则子查询返回customer。如果客户返回到主查询,则该客户的所有记录都将其timesPurchased设置为0。

是否应将与customerId、productId相关的所有3个timesPirchased重置为0,还是仅将其中一个重置为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
    )