Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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 server中的更新表_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL server中的更新表

SQL server中的更新表,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的“事件”列为空时有一个类似于表的列 逻辑很简单。客户的销售日期可以出现一次或多次。我们首先为每个客户检查年份,如果年份相同,则检查销售日期,从而设置事件 任何人都可以帮助我如何更新!谢谢。可以使用行号()功能完成 UPDATE table1 t SET Event = (WITH v AS (SELECT ROW_NUMBER() OVER(PARTITION BY CustomerId ORDER BY Year, SaleDate) AS row_num,

我的“事件”列为空时有一个类似于表的列

逻辑很简单。客户的销售日期可以出现一次或多次。我们首先为每个客户检查年份,如果年份相同,则检查销售日期,从而设置事件


任何人都可以帮助我如何更新!谢谢。

可以使用
行号()
功能完成

UPDATE table1 t SET Event =
    (WITH v AS
    (SELECT ROW_NUMBER() OVER(PARTITION BY CustomerId ORDER BY Year, SaleDate)
       AS row_num, id
    FROM table1)
    SELECT row_num FROM v
    WHERE id = t.id);

您可以使用以下查询。用实际的表名替换表名

UPDATE TableName SET [Event] = SeqTable.Seq
FROM  
    (SELECT ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY [Year],SaleDate) AS Seq
     FROM TableName) 
     AS SeqTable
WHERE TableName.id = SeqTable.id

使用
CTE
ROW\u NUMBER()
函数尝试此操作:

;WITH CTE AS
(
    SELECT Event, 
           ROW_NUMBER() OVER (PARTITION BY Customer, Year ORDER BY SaleDate) rn
    FROM YourTable
)
UPDATE CTE SET Event = rn

作为一个相关子查询,我认为该子查询在每次调用中只会返回一行,因此它只能生成
1