還是先上代碼吧
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)遂寧,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
,可以先看
SQL語句去掉重復(fù)記錄,獲取重復(fù)記錄
復(fù)制代碼
代碼如下:
ALTER
procedure
[dbo].[PROC_ITEMMASTER_GETUNIQUE]
@PAGEINDEX
INT,@uid
int,@itemnumber
varchar(50)
AS
begin
tran
--開始事務(wù)
drop
table
[ItemMaster].[dbo].[testim]
--刪除表
--把不重復(fù)記錄轉(zhuǎn)存到testim中
select
*
into
[ItemMaster].[dbo].[testim]
from
[ItemMaster].[dbo].[dat_item_master]
where
item_uid
in(select
min(item_uid)
as
item_uid
from
[ItemMaster].[dbo].[dat_item_master]
group
by
item_number)
and
status=0
select
top
10
*
from
[ItemMaster].[dbo].[testim]
where
item_uid
not
in
(select
top
(10*(@PAGEINDEX-1))
item_uid
from
[ItemMaster].[dbo].[testim])
and
owneruid=@uid
and
item_number
like
@itemnumber+'%'
--判斷是否出錯(cuò)
if
@@error0
begin
rollback
tran
--出錯(cuò)則回滾
end
else
begin
--否則提前事務(wù)
commit
tran
end
我的數(shù)據(jù)是這樣的:因?yàn)閕tem_uid是標(biāo)識(shí)列,item_number有重復(fù)的,
我想過濾成這樣:
順帶說幾個(gè)在編程的時(shí)候遇到的小問題
1.程序
出現(xiàn)
Could
not
find
stored
procedure
找不到這個(gè)存儲(chǔ)過程
因?yàn)槲业某绦驍?shù)據(jù)庫(kù)有四個(gè),而默認(rèn)連接是A,但實(shí)際要執(zhí)行B庫(kù)里的存儲(chǔ)過程,導(dǎo)致出錯(cuò),
解決辦法1:可在A里面建個(gè)一樣的存儲(chǔ)過程2:在執(zhí)行連接的時(shí)候,替換下數(shù)據(jù)庫(kù)就行了
2.
asp.net/C#
將存儲(chǔ)過程中返回的數(shù)據(jù)集,填充到dataset/datatable
復(fù)制代碼
代碼如下:
SqlConnection
conn
=
new
SqlConnection(ConfigurationManager.ConnectionStrings["SolutionSQLServer"].ToString());
SqlCommand
cmd
=
new
SqlCommand("Test",conn);
cmd.CommandType
=
CommandType.StoredProcedure;
cmd.Parameters.Add("@MaxId",
SqlDbType.Int).Value
=
12000;
SqlDataAdapter
sda
=
new
SqlDataAdapter(cmd);
DataTable
dt
=
new
DataTable();
sda.Fill(dt);
在這感謝
3.在存儲(chǔ)過程里面,寫SQL語句不能動(dòng)態(tài)不加order
by
功能
比如
復(fù)制代碼
代碼如下:
--·@new_orderby
是傳入?yún)?shù),不能這樣寫
select
top
(10*(2-1))
item_uid
from
testim
order
by
@new_orderby
--執(zhí)行這個(gè)的時(shí)候,SQL會(huì)出現(xiàn)
The
SELECT
item
identified
by
the
ORDER
BY
number
1
contains
a
variable
as
part
of
the
expression
identifying
a
column
position.
Variables
are
only
allowed
when
ordering
by
an
expression
referencing
a
column
name.
不過我找到解決辦法,不過很麻煩,
(第二個(gè)回答用
'
sql
'進(jìn)行連接)
(用case
end
也行)
4.
select
into
和
insert
into
select
兩種復(fù)制文句
(這里感謝)
1.INSERT
INTO
SELECT語句
語句形式為:Insert
into
Table2(field1,field2,...)
select
value1,value2,...
from
Table1
要求目標(biāo)表Table2必須存在,由于目標(biāo)表Table2已經(jīng)存在,所以我們除了插入源表Table1的字段外,還可以插入常量。
2.SELECT
INTO
FROM語句
語句形式為:SELECT
vale1,
value2
into
Table2
from
Table1
要求目標(biāo)表Table2不存在,因?yàn)樵诓迦霑r(shí)會(huì)自動(dòng)創(chuàng)建表Table2,并將Table1中指定字段數(shù)據(jù)復(fù)制到Table2中。
5.順便復(fù)習(xí)下常用的SQL方法語句
復(fù)制代碼
代碼如下:
declare
@name
varchar(200)
--聲明變量
set
@name='abcd;def'
--賦值
'exec
len
:'+Convert(varchar(10),Len(@name))
--convert(type,value)轉(zhuǎn)換,Len(value)獲取大小
'exec
charindex:'+Convert(varchar(10),CharIndex('e',@name))--CharIndex(find,value)
在value中查找find的位置
'not
replace:'+@name
'exec
replace:'+Replace(@name,';','')
--用replace替換
'exec
substring:'+Substring(@name,0,3)--用substring截取
@@RowCount
--返回上一行代碼受影響的行數(shù)
作者:chenhuzi
1、查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來判斷
select
* from people
where peopleId in (select peopleId from
people group by peopleId having count(peopleId)
1)
2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來判斷,只留有rowid最小的記錄
delete
from people
where peopleId in (select peopleId from
people group by peopleId having
count(peopleId) 1)
and rowid not in (select min(rowid) from
people group by peopleId having count(peopleId
)1)
3、查找表中多余的重復(fù)記錄(多個(gè)字段)
select * from vitae a
where (a.peopleId,a.seq)
in (select peopleId,seq from vitae group by peopleId,seq having
count(*) 1)
4、刪除表中多余的重復(fù)記錄(多個(gè)字段),只留有rowid最小的記錄
delete from vitae a
where
(a.peopleId,a.seq) in (select peopleId,seq from vitae group by
peopleId,seq having count(*) 1)
and rowid not in (select min(rowid) from
vitae group by peopleId,seq having count(*)1)
5、查找表中多余的重復(fù)記錄(多個(gè)字段),不包含rowid最小的記錄
select * from vitae a
where
(a.peopleId,a.seq) in (select peopleId,seq from vitae group by
peopleId,seq having count(*) 1)
and rowid not in (select min(rowid) from
vitae group by peopleId,seq having count(*)1)
(二)
比方說
在A表中存在一個(gè)字段“name”,
而且不同記錄之間的“name”值有可能會(huì)相同,
現(xiàn)在就是需要查詢出在該表中的各記錄之間,“name”值存在重復(fù)的項(xiàng);
Select
Name,Count(*) From A Group By Name Having Count(*) 1
如果還查性別也相同大則如下:
Select Name,sex,Count(*) From A Group By Name,sex Having
Count(*) 1
b. 方法:
☆根據(jù)dname分組,查找出deptno最小的。然后再查找deptno不包含剛才查出來的。這樣就查詢出了所有的重復(fù)數(shù)據(jù)(除了deptno最小的那行)
方法2
刪除重復(fù)的行
單個(gè)字段的如果會(huì)了,多個(gè)字段也非常簡(jiǎn)單。就是將group by 的字段增加為你想要的即可。
此處只寫一個(gè),其他方法請(qǐng)仿照一個(gè)字段的寫即可。
查詢結(jié)果不含指定字段重復(fù)
2.表需要?jiǎng)h除重復(fù)的記錄(重復(fù)記錄保留1條),
3.查詢重復(fù)
4.1、查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來判斷
4.2、刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來判斷,只留有rowid最小的記錄
4.3、查找表中多余的重復(fù)記錄(多個(gè)字段)
4.4、刪除表中多余的重復(fù)記錄(多個(gè)字段),只留有rowid最小的記錄
4.5、查找表中多余的重復(fù)記錄(多個(gè)字段),不包含rowid最小的記錄
4.6.消除一個(gè)字段的左邊的第一位:
4.7.消除一個(gè)字段的右邊的第一位:
4.8.假刪除表中多余的重復(fù)記錄(多個(gè)字段),不包含rowid最小的記錄
查詢重復(fù)
1、必須保證表中有主鍵或者唯一索引,或者某列數(shù)據(jù)不能重復(fù)。只有這樣,才可能使用一句SQL來實(shí)現(xiàn)。否則只能考慮其它辦法。下面的語句,假定BB列是不重復(fù)的,刪除后保存BB列值最大的那條記錄。
delete
from
表
where
aa
in
(select
aa
from
表
group
by
aa
having
count(aa)
1)
and
bb
not
in
(select
max(bb)
from
表
group
by
aa
having
count(aa)
1);
2、有多種寫法:
delete
A
from
B
where
A.AA
=
B.AA
delete
A
from
A,B
where
A.AA
=
B.AA
delete
A
where
AA
in
(select
AA
from
B)
3、使用into關(guān)鍵字:
select
*
into
新表名
from
原表
4、取數(shù)據(jù)前3位,字段必須是類似char類型,使用類似substring這樣的函數(shù)(SYBASE是substring,ORACLE是substr):
select
substring(字段,1,3)
from
表名
1、要有定位基準(zhǔn),也就是說,你的表必需要有一個(gè)不重復(fù)的鍵值,如果沒有,請(qǐng)你給這個(gè)表加一個(gè)字段,將這個(gè)字段設(shè)為自增變量字段,建議為int類型,比如字段名可為“編碼”。
2、查重復(fù)的數(shù)據(jù):
select?*from?表名?where?編碼?in
(select?編碼?from?表名?group?by?編碼?having?count(1)?=?2)
3、刪除所有有重復(fù)的記錄:
delete?from?表名?where?
編碼?in(select?編碼?from?表名?group?by?編碼?having?count(1)?=?2)
4、刪去重復(fù)的,只留下重復(fù)記錄中編碼最大的一條:
delete?from?表名?where?
編碼?in(select?編碼?from?表名?group?by?編碼?having?count(1)?=?2)?
and?編碼?not?in?(select?max(編碼)from?表名?group?by?編碼?having?count(1)?=2)