Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 在表格的每一列中插入基于条件的值_Sql_Sql Server_Tsql_Duplicates_Temp Tables - Fatal编程技术网

Sql 在表格的每一列中插入基于条件的值

Sql 在表格的每一列中插入基于条件的值,sql,sql-server,tsql,duplicates,temp-tables,Sql,Sql Server,Tsql,Duplicates,Temp Tables,我有这样一个产品表: 我想删除此表中的重复行并使用其他表中的ID,因此我使用了一个临时表来添加要删除的ID和要保留的ID: -创建tmp表 创建表tmp ProductId_ToKeep int,ProductId_ToDelete int; -在临时表中收集id较低且名称相同的产品 插入tmp ProductId_以保留 选择[ProductId] 来自dbo。[Product]t1 哪里有 选择1 来自dbo。[产品]t2 其中t2.name=t1.name t2.[ProductId]>t

我有这样一个产品表:

我想删除此表中的重复行并使用其他表中的ID,因此我使用了一个临时表来添加要删除的ID和要保留的ID:

-创建tmp表 创建表tmp ProductId_ToKeep int,ProductId_ToDelete int; -在临时表中收集id较低且名称相同的产品 插入tmp ProductId_以保留 选择[ProductId] 来自dbo。[Product]t1 哪里有 选择1 来自dbo。[产品]t2 其中t2.name=t1.name t2.[ProductId]>t1.[ProductId] ; -在临时表中收集id较高且名称相同的产品 插入tmp ProductId\u ToDelete 选择[ProductId] 来自dbo。[Product]t1 哪里有 选择1 来自dbo。[产品]t2 其中t2.name=t1.name t2.[ProductId]
我在问是否有人能帮我把ID放在我想要的每一列中。

如果我正确地跟随了你,你可以使用一个窗口函数在一个查询中输入代码转换表,如下所示:

insert into #tmp (ProductId_ToKeep, ProductId_ToDelete)
select *
from (
    select 
        ProductId ProductId_ToDelete, 
        min(ProductId) over(partition by name) ProductId_ToKeep
    from dbo.[Product]
) t
where ProductId_ToDelete != ProductId_ToKeep

内部查询提取给定名称的最小ProductId;应该删除的记录上的外部查询筛选器,即其ProductId不是相同名称的最小ProductId。

图像的超链接对我们没有帮助。花点时间以文本形式提供示例数据,以便我们可以复制问题并测试解决方案。您的示例数据没有任何重复的行,只有重复的名称值。也许你可以澄清这个问题。谢谢!我放弃了这个想法,在我的情况下,我会把最小值改成最大值,然后得到我想要的。