假设我的表中有重复的行,而且我的数据库设计是第3类: -
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (1,'Cinthol','cosmetic soap','soap');
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (1,'Cinthol','cosmetic soap','soap');
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (1,'Cinthol','cosmetic soap','soap');
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (1,'Lux','cosmetic soap','soap');
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (1,'Crowning Glory','cosmetic soap','soap');
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (2,'Cinthol','nice soap','soap');
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (3,'Lux','nice soap','soap');
Insert Into tblProduct (ProductId,ProductName,Description,Category) Values (3,'Lux','nice soap','soap');
Run Code Online (Sandbox Code Playgroud)
我希望每个表中只有1个实例存在于我的表中.因此,2nd, 3rd and last row应该删除完全相同的whcih.我可以为此写什么查询?可以在不创建临时表的情况下完成吗?只需一个查询?
提前致谢 :)
我有一个叫table1有重复值的表.它看起来像这样:
new
pen
book
pen
like
book
book
pen
Run Code Online (Sandbox Code Playgroud)
但是我想从该表中删除重复的行并将它们插入到另一个名为的表中table2.
table2 应该是这样的:
new
pen
book
like
Run Code Online (Sandbox Code Playgroud)
我怎么能在SQL Server中执行此操作?
我研究过它,我找到的最实用的方法是创建一个程序.该过程
添加一个id,删除重复的行,最后将一个id列添加到新形成的表中.我想,必须有一个更简单的方法.这是代码,它有效......
- 我的桌子
create table dublicateTable
(
name varchar(30)
)
Run Code Online (Sandbox Code Playgroud)
- 重复插入行
insert into dublicateTable values('Kerem')
insert into dublicateTable values('Taner')
insert into dublicateTable values('Mehmet')
insert into dublicateTable values('Serhat')
Run Code Online (Sandbox Code Playgroud)
- 第一种情况
select * from dublicateTable
name
-----
Kerem
Kerem
Kerem
Taner
Taner
Mehmet
Mehmet
Mehmet
Mehmet
Serhat
Serhat
Serhat
Run Code Online (Sandbox Code Playgroud)
--dynamicaly形成了sql代码程序
USE [myDataBase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create procedure [dbo].[usp_delete_duplicate]
as
declare
@add_id_text nvarchar(50),
@delete_id_text nvarchar(50),
@command_text nvarchar(100)
begin
set @add_id_text='alter table dbo.dublicateTable add id int …Run Code Online (Sandbox Code Playgroud) 我目前有一张叫做People的桌子.在此表中,有数千行数据遵循以下布局:
gkey | Name | Date | Person_Id
1 | Fred | 12/05/2012 | ABC123456
2 | John | 12/05/2012 | DEF123456
3 | Dave | 12/05/2012 | GHI123456
4 | Fred | 12/05/2012 | JKL123456
5 | Leno | 12/05/2012 | ABC123456
Run Code Online (Sandbox Code Playgroud)
如果我执行以下操作:
SELECT [PERSON_ID], COUNT(*) TotalCount
FROM [Database].[dbo].[People]
GROUP BY [PERSON_ID]
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC
Run Code Online (Sandbox Code Playgroud)
我得到了回报:
Person_Id | TotalCount
ABC123456 | 2
Run Code Online (Sandbox Code Playgroud)
现在我想只删除一行重复值,所以当我执行上面的查询时,我没有返回任何结果.这可能吗?
id_specific_price id_product
-------------------------------
1 2
2 2
3 2
4 3
5 3
6 3
7 3
Run Code Online (Sandbox Code Playgroud)
需要删除重复项,预期结果:
id_specific_price id_product
-------------------------------
3 2
7 3
Run Code Online (Sandbox Code Playgroud)
SELECT *
FROM ps_specific_price
WHERE id_specific_price NOT IN
(SELECT MAX(id_specific_price)
FROM ps_specific_price
GROUP BY id_product)
Run Code Online (Sandbox Code Playgroud)
工作,但
DELETE FROM ps_specific_price
WHERE id_specific_price NOT IN
(SELECT MAX(id_specific_price)
FROM ps_specific_price
GROUP BY id_product)
Run Code Online (Sandbox Code Playgroud)
才不是.有很多例子可以解决这个问题,但由于某种原因,我无法适应它.我相信它是GROUP BY.例如:
DELETE FROM ps_specific_price
WHERE id_specific_price NOT IN
(SELECT MAX(p.id_specific_price)
FROM (SELECT * FROM ps_specific_price ) as p)
GROUP BY id_product
Run Code Online (Sandbox Code Playgroud)
我在哪里错了?
当尝试从 Sybase 到 Microsoft SQL 执行 OPENQUERY 时,我遇到错误:
通过 OPENQUERY 和 OPENROWSET 获取的结果集中不允许有重复的列名。列名“PatientID”重复。
我构建的查询基于相似的missionID 和病人ID 连接了2 个表。
例如:
PatID AdmID Loc PatID AdmID Doctor
1 5 NC 1 5 Smith
2 7 SC 2 7 Johnson
Run Code Online (Sandbox Code Playgroud)
当然,真正的查询包含的信息远不止这些。
有没有一种好方法可以重命名或删除 AdmID 和 PatID 列之一?
我尝试过:
SELECT * INTO #tempTable
ALTER #tempTable
DROP COLUMN PatID
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为 PatID 不明确。
我也尝试过:
SELECT firstTable.PatID as 'pID', * FROM...
Run Code Online (Sandbox Code Playgroud)
这也行不通。
我确定以前曾经问过,但我很难找到它.
我在一个表中有多组重复项(3个记录为一个,2个为另一个,等等) - 存在多个行的多行.
下面是我想要删除它们,但我必须运行脚本,但有许多重复:
set rowcount 1
delete from Table
where code in (
select code from Table
group by code
having (count(code) > 1)
)
set rowcount 0
Run Code Online (Sandbox Code Playgroud)
这在某种程度上很有效.我需要为每组重复项运行它,然后它只删除1(这是我现在所需要的).
感谢您的帮助/评论!
当我加入主表时,我有一个工作正常的视图:
LEFT OUTER JOIN OFFICE ON CLIENT.CASE_OFFICE = OFFICE.TABLE_CODE.
Run Code Online (Sandbox Code Playgroud)
但是我需要添加以下连接:
LEFT OUTER JOIN OFFICE_MIS ON CLIENT.REFERRAL_OFFICE = OFFICE_MIS.TABLE_CODE
Run Code Online (Sandbox Code Playgroud)
虽然我补充说DISTINCT,我仍然得到一个"重复"的行.我说"重复",因为第二行有不同的值.
但是,如果我将其更改为a LEFT OUTER,则会INNER JOIN丢失具有这些"重复"行的客户端的所有行.
我究竟做错了什么?如何从我的视图中删除这些"重复"行?
此问题不适用于此实例:
sql ×8
sql-server ×6
t-sql ×5
database ×2
mysql ×2
duplicates ×1
group-by ×1
group-concat ×1
sybase ×1