你照我這個例子寫
D_DATE V_NAME V_SCORES
2008-8-8 拜仁 勝
2008-8-9 奇才 勝
2008-8-9 湖人 勝
2008-8-10 拜仁 負
2008-8-8 拜仁 負
2008-8-12 奇才 勝
DELETE FROM T_SCORES T1
WHERE T1.ROWID IN (SELECT ROWID
FROM (SELECT ROWID,
T.*,
ROW_NUMBER() OVER(PARTITION BY T.V_NAME ORDER BY 1) DATA_ORDER
FROM T_SCORES T)
WHERE DATA_ORDER <> 1)
㈡ SQL怎麼去除某一列的重復項
假設存在一個主鍵ID,Name為重復列--下面這句可以查出所有的沒有重復的數據select * from 表 as a where ID=(select min(ID) from 表 where Name=a.Name) --根據上面這句就可以刪除所有重復項的數據delete from 表 where ID not in(select ID from 表 as a where ID=(select min(ID) from 表 where Name=a.Name))好了~
㈢ 如何刪除SQL列重復記錄
不知道你你的表結構是怎樣的,也不知道你的結果是怎麼查詢出來了!
建議你加個條件就可以了!
Select * from table
where IsNull(部門,'')<>''
部門那列不為空
㈣ 如何SQL語句去除兩列重復
你好,可以這樣:
先用列1分組,如下
select*fromidin(
selectmax(id)from表名groupby列1)
先把列1的重復排除掉,再來排除列2的,語句合在一起就是:
select*from表名whereidin(
selectmax(id)from(
select*fromidin(
selectmax(id)from表名groupby列1)
)t1
groupby列2
)
就是通過分組,把重復排除,前提是你要保證ID欄位是唯一值。如果有問題,可以追問。
㈤ sql 去除重復記錄,多欄位匹配
--若id為int數據類型,統計規則是去重,取其最小的id
selectmin(id),a,b,c,dfromtable_namegroupbya,b,c,d
--方法二:請修改table_name表名稱
select*fromtable_namewhereidnotin
(
selecta.id
fromtable_nameainnerjoin(selecta,b,c,dfromtable_namegroupbya,b,c,dhavingcount(*)>1)b
ona.a=b.aanda.b=b.banda.c=b.canda.d=b.d;
)
㈥ sql去除重復的項
distinct
b,a,c
------是將b
a
c完全相的記錄只取一條,你的數據里根本沒有完全相同的記錄,所以會全部輸出;
你要的數據可以用下面的sql
select
*
from
(select
t.*,row_number()
over(partition
by
b
order
by
b)
numid
from
table
t)
a
where
a.numid=1;
㈦ SQL語句查詢多個欄位並按某一個欄位去掉重復項
用這個試試,比你那個好
SELECT * from (
SELECT *,ROW_NUMBER()OVER(PARTITION BY user_id ORDER BY pro_id DESC) as num
FROM dbo.Proct_new
) a where a.num=1
㈧ SQL如何排除多欄位的重復項
--sqlser代碼
select*from
(
select*,row_number()over(partitionby[名稱],[顏色]orderby[時間]asc)asgroup_idxfromtablename
)k
wheregroup_idx=1
㈨ sql 過濾掉多欄位重復的記錄
-按某一欄位分組取最大(小)值所在行的數據
--(愛新覺羅.毓華(十八年風雨,守得冰山雪蓮花開) 2007-10-23於浙江杭州)
/*
數據如下:
name val(成績) memo(科目)
a 2 a2(a的第二個值)
a 1 a1--a的第一個值
a 3 a3:a的第三個值
b 1 b1--b的第一個值
b 3 b3:b的第三個值
b 2 b2b2b2b2
b 4 b4b4
b 5 b5b5b5b5b5
*/
--創建表並插入數據:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二個值)')
insert into tb values('a', 1, 'a1--a的第一個值')
insert into tb values('a', 3, 'a3:a的第三個值')
insert into tb values('b', 1, 'b1--b的第一個值')
insert into tb values('b', 3, 'b3:b的第三個值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
go
--一、按name分組取val最大的值所在行的數據。
--方法1:
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
--方法3:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name
/*
name val memo
---------- ----------- --------------------
a 3 a3:a的第三個值
b 5 b5b5b5b5b5
*/
--二、按name分組取val最小的值所在行的數據。
--方法1:
select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val < a.val)
--方法3:
select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val < a.val) order by a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一個值
b 1 b1--b的第一個值
*/
--三、按name分組取第一次出現的行所在的數據。
select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二個值)
b 1 b1--b的第一個值
*/
--四、按name分組隨機取一條數據。
select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一個值
b 5 b5b5b5b5b5
*/
--五、按name分組取最小的兩個(N個)val
select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val < a.val ) order by a.name,a.val
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val < a.val having Count(*) < 2) order by a.name,a.val
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一個值
a 2 a2(a的第二個值)
b 1 b1--b的第一個值
b 2 b2b2b2b2
*/
--六、按name分組取最大的兩個(N個)val
select a.* from tb a where 2 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name,a.val
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val > a.val having Count(*) < 2) order by a.name , a.val
/*
name val memo
---------- ----------- --------------------
a 2 a2(a的第二個值)
a 3 a3:a的第三個值
b 4 b4b4
b 5 b5b5b5b5b5
*/
--七,如果整行數據有重復,所有的列都相同。
/*
數據如下:
name val memo
a 2 a2(a的第二個值)
a 1 a1--a的第一個值
a 1 a1--a的第一個值
a 3 a3:a的第三個值
a 3 a3:a的第三個值
b 1 b1--b的第一個值
b 3 b3:b的第三個值
b 2 b2b2b2b2
b 4 b4b4
b 5 b5b5b5b5b5
*/
--在sql server 2000中只能用一個臨時表來解決,生成一個自增列,先對val取最大或最小,然後再通過自增列來取數據。
--創建表並插入數據:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二個值)')
insert into tb values('a', 1, 'a1--a的第一個值')
insert into tb values('a', 1, 'a1--a的第一個值')
insert into tb values('a', 3, 'a3:a的第三個值')
insert into tb values('a', 3, 'a3:a的第三個值')
insert into tb values('b', 1, 'b1--b的第一個值')
insert into tb values('b', 3, 'b3:b的第三個值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
go
select * , px = identity(int,1,1) into tmp from tb
select m.name,m.val,m.memo from
(
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
) m where px = (select min(px) from
(
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
) n where n.name = m.name)
drop table tb,tmp
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一個值
b 1 b1--b的第一個值
(2 行受影響)
*/
--在sql server 2005中可以使用row_number函數,不需要使用臨時表。
--創建表並插入數據:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二個值)')
insert into tb values('a', 1, 'a1--a的第一個值')
insert into tb values('a', 1, 'a1--a的第一個值')
insert into tb values('a', 3, 'a3:a的第三個值')
insert into tb values('a', 3, 'a3:a的第三個值')
insert into tb values('b', 1, 'b1--b的第一個值')
insert into tb values('b', 3, 'b3:b的第三個值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
go
select m.name,m.val,m.memo from
(
select * , px = row_number() over(order by name , val) from tb
) m where px = (select min(px) from
(
select * , px = row_number() over(order by name , val) from tb
) n where n.name = m.name)
drop table tb
/*
name val memo
---------- ----------- --------------------
a 1 a1--a的第一個值
b 1 b1--b的第一個值
(2 行受影響)
*/
㈩ sql 怎麼查詢多個列並對其中某列去重復
這樣肯定不行啊,因為資料庫無法判斷你要去掉哪條重復的。
比如你想要a只顯示一條,但是相對於a的col1裡面有三個不同的值,資料庫是無法給你判斷的。
這個時候就要看你想要什麼樣的值了,假如我想要每個人的最低分科目
select t.col2, min(t.col1) from t_table t
group by t.col2
having min(t.col1) > '-1'
一個簡單的分組就搞定了。
用sqlserver的時候會有點小問題。可以考慮嵌套查詢:
例如
select * from table1
where id in (select id from table1
group by name)