求一個select語句,謝謝

jackbaby 2009-07-06 03:16:26
能否一個Select語句得到結果呢》

orderno partno other num1 num2 num3 num4
OX090608956 CISCO1841 NULL .000 .000 1 0
OX090608956 CISCO1841 74919946 4.000 4.000 0 0
OX090608956 CISCO1841 V04 NULL .000 .000 2 0
OX090608956 CISCO1841 V05 NULL .000 .000 1 0
OX090608956 CISCO2801 74919946 2.000 2.000 0 0
OX090608956 CISCO2801 V03 NULL .000 .000 1 0
OX090608956 CISCO2801 V05 NULL .000 .000 1 0
OX090608956 CISCO2811 NULL .000 .000 2 0
OX090608956 CISCO2811 74919946 2.000 2.000 0 0
OX090608956 CISCO2851 74919946 1.000 1.000 0 0
OX090608956 CISCO2851 V05 NULL .000 .000 1 0
OX090608956 CISCO3825 74919946 2.000 2.000 0 0
OX090608956 CISCO3825 V03 NULL .000 .000 1 0
OX090608956 CISCO3825 V05 NULL .000 .000 1 0
OX090608956 CISCO3845 74919946 2.000 2.000 0 0
OX090608956 CISCO3845 V01 NULL .000 .000 2 0
OX090608956 CISCO3845-MB= NULL .000 .000 3 0
OX090608956 CISCO3845-MB= 74919946 3.000 3.000 0 0
OX090608956 CISCO837-K9-64 NULL .000 .000 1 0
OX090608956 CISCO837-K9-64 74919946 1.000 1.000 0 0
OX090608956 CISCO877-K9 74919946 1.000 1.000 0 0
OX090608956 CISCO877-K9 V01 NULL .000 .000 1 0
OX090608956 CP-7906G= 74919946 4.000 4.000 0 0
OX090608956 CP-7906GV05 NULL .000 .000 4 0
OX090608956 CP-7911G= 74919946 4.000 4.000 0 0
OX090608956 CP-7911GV05 NULL .000 .000 3 0
OX090608956 CP-7911GV07 NULL .000 .000 1 0
OX090608956 WS-C2950-24 NULL .000 .000 5 0
OX090608956 WS-C2950-24 74919946 5.000 5.000 0 0
OX090608956 WS-C2950G-24-EI NULL .000 .000 1 0
OX090608956 WS-C2950G-24-EI 74919946 1.000 1.000 0 0
OX090608956 WS-C2950T-24 NULL .000 .000 1 0
OX090608956 WS-C2950T-24 74919946 1.000 1.000 0 0
OX090608956 WS-C3524-XL-EN NULL .000 .000 1 0
OX090608956 WS-C3524-XL-EN 74919946 1.000 1.000 0 0


上面的數據,如果(orderno和partno相同就要去掉)
OX090608956 CISCO1841
前面兩個字段相同的能不能不能去掉呢?想了很多辦法,都不行,鬱悶

謝謝大家了
...全文
56 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jamin_Liu 2009-07-06
  • 打赏
  • 举报
回复
--測試數據
declare @test table
(
orderno varchar(20)
,partno varchar(20)
,other varchar(50)
,num1 decimal(10,2)
,num2 decimal(10,2)
,num3 decimal(10,2)
,num4 decimal(10,2)
);
insert into @test
select 'OX090608956','CISCO1841', NULL,.000,.000,1,0 union all
select 'OX090608956','CISCO1841','74919946',4.000,4.000,0,0 union all
select 'OX090608956','CISCO1841 V04', NULL,.000,.000,2,0 union all
select 'OX090608956','CISCO1841 V05',NULL,.000,.000,1,0 union all
select 'OX090608956','CISCO2801','74919946',2.000,2.000,0,0 union all
select 'OX090608956','CISCO2801 V03',NULL,.000,.000,1,0 union all
select 'OX090608956','CISCO2801 V05',NULL,.000,.000,1,0 union all
select 'OX090608956','CISCO2811',NULL,.000,.000,2,0 union all
select 'OX090608956','CISCO2811','74919946',2.000,2.000,0,0 union all
select 'OX090608956','CISCO2851','74919946',1.000,1.000,0,0 union all
select 'OX090608956','CISCO2851 V05',NULL,.000,.000,1,0 union all
select 'OX090608956','CISCO3825','74919946',2.000,2.000,0,0 union all
select 'OX090608956','CISCO3825 V03', NULL,.000,.000,1,0 union all
select 'OX090608956','CISCO3825 V05', NULL,.000,.000,1,0 union all
select 'OX090608956','CISCO3845','74919946',2.000, 2.000, 0 ,0 union all
select 'OX090608956','CISCO3845 V01',NULL,.000,.000,2,0 union all
select 'OX090608956','CISCO3845-MB=',NULL,.000,.000,3,0 union all
select 'OX090608956','CISCO3845-MB=','74919946',3.000,3.000,0,0 union all
select 'OX090608956','CISCO837-K9-64',NULL,.000,.000 ,1 ,0 union all
select 'OX090608956','CISCO837-K9-64','74919946', 1.000 ,1.000 ,0, 0 union all
select 'OX090608956','CISCO877-K9','74919946', 1.000, 1.000, 0, 0 union all
select 'OX090608956','CISCO877-K9 V01', NULL,.000,.000,1 ,0 union all
select 'OX090608956','CP-7906G=','74919946', 4.000,4.000,0,0 union all
select 'OX090608956','CP-7906GV05',NULL,.000,.000,4,0 union all
select 'OX090608956','CP-7911G=','74919946',4.000 ,4.000, 0, 0 union all
select 'OX090608956','CP-7911GV05',NULL ,.000 ,.000, 3 ,0 union all
select 'OX090608956','CP-7911GV07',NULL,.000, .000 ,1 ,0 union all
select 'OX090608956','WS-C2950-24',NULL, .000 ,.000 ,5, 0 union all
select 'OX090608956','WS-C2950-24','74919946', 5.000 ,5.000 ,0 ,0 union all
select 'OX090608956','WS-C2950G-24-EI',NULL,.000 ,.000, 1, 0 union all
select 'OX090608956','WS-C2950G-24-EI','74919946', 1.000 ,1.000, 0, 0 union all
select 'OX090608956','WS-C2950T-24',NULL,.000 ,.000, 1 ,0 union all
select 'OX090608956','WS-C2950T-24','74919946 ',1.000, 1.000, 0 ,0 union all
select 'OX090608956','WS-C3524-XL-EN',NULL, .000, .000, 1, 0 union all
select 'OX090608956','WS-C3524-XL-EN','74919946', 1.000,1.000,0,0 ;
--查詢
select orderno,partno from @test group by orderno,partno having COUNT(1)=1
zxkid 2009-07-06
  • 打赏
  • 举报
回复
select *
from table i
where exists
(
select 1
from
(
select no, partno from table group by no, partno having count(*) = 1
) t
where t.no = i.no and t.partno = i.partno
)
jackbaby 2009-07-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wufeng4552 的回复:]
SQL codeSELECT*FROM TB A,(SELECT no,partnoFROM TBGROUPBY no,partnoHAVINGCOUNT(*)=1)BWHERE A.no=B.noAND A.partno=B.partno
[/Quote]

謝謝各位兄弟,我借用了wufeng4552兄的,可以用的,謝謝大家!
htl258_Tony 2009-07-06
  • 打赏
  • 举报
回复

---------------------------------
-- Author: htl258(Tony)
-- Date : 2009-07-06 15:30:25
---------------------------------
--> 生成测试数据表-tb

if not object_id('tb') is null
drop table tb
Go
Create table tb([no] int,[partno] int,[other] nvarchar(5),[num1] int)
Insert tb
select 1,2,'abcde',2 union all
select 1,2,'mmm',0 union all
select 1,3,'kkk',1 union all
select 1,4,'mkl',5
Go
--Select * from tb

-->SQL查询如下:
select *
from tb t
where not exists(
select 1
from tb
where [no]=t.[no] and [partno]=t.[partno]
group by [no],[partno]
having count(1)>1)

/*
no partno other num1
----------- ----------- ----- -----------
1 3 kkk 1
1 4 mkl 5

(2 行受影响)
*/
水族杰纶 2009-07-06
  • 打赏
  • 举报
回复
DECLARE @T TABLE(no INT,partno INT,other VARCHAR(10),num1 INT) 
INSERT @T SELECT 1 , 2, 'abcde' , 2
INSERT @T SELECT 1 , 2 , 'mmm' , 0
INSERT @T SELECT 1 , 3 , 'kkk' , 1
INSERT @T SELECT 1, 4 , 'mkl' , 5
SELECT * FROM @T A,(
SELECT no,partno FROM @T GROUP BY no,partno HAVING COUNT(*)=1)B
WHERE A.no=B.no AND A.partno=B.partno
/*no partno other num1 no partno
----------- ----------- ---------- ----------- ----------- -----------
1 3 kkk 1 1 3
1 4 mkl 5 1 4

(2 個資料列受到影響)*/
--小F-- 2009-07-06
  • 打赏
  • 举报
回复
...看错了 原来是要删除最小的记录
jiangshun 2009-07-06
  • 打赏
  • 举报
回复

if object_id('[tab]') is not null drop table [tab]
create table [tab]([no] int,[partno] int,[other] varchar(5),[num1] int)
insert [tab]
select 1,2,'abcde',2 union all
select 1,2,'mmm',0 union all
select 1,3,'kkk',1 union all
select 1,4,'mkl',5

select * from [tab] t where not exists(select 1 from tab where t.partno=partno group by partno having count(partno)>1)

/*
no partno other num1
----------- ----------- ----- -----------
1 3 kkk 1
1 4 mkl 5

(所影响的行数为 2 行)
*/
drop table tab
水族杰纶 2009-07-06
  • 打赏
  • 举报
回复
SELECT * FROM TB A,(
SELECT no,partno FROM TB GROUP BY no,partno HAVING COUNT(*)=1)B
WHERE A.no=B.no AND A.partno=B.partno
--小F-- 2009-07-06
  • 打赏
  • 举报
回复
--3、删除重复记录没有大小关系时,处理重复值


--> --> (Roy)生成測試數據

if not object_id('Tempdb..#T') is null
drop table #T
Go
Create table #T([Num] int,[Name] nvarchar(1))
Insert #T
select 1,N'A' union all
select 1,N'A' union all
select 1,N'A' union all
select 2,N'B' union all
select 2,N'B'
Go

方法1:
if object_id('Tempdb..#') is not null
drop table #
Select distinct * into # from #T--排除重复记录结果集生成临时表#

truncate table #T--清空表

insert #T select * from # --把临时表#插入到表#T中

--查看结果
select * from #T

/*
Num Name
----------- ----
1 A
2 B

(2 行受影响)
*/

--重新执行测试数据后用方法2
方法2:

alter table #T add ID int identity--新增标识列
go
delete a from #T a where exists(select 1 from #T where Num=a.Num and Name=a.Name and ID>a.ID)--只保留一条记录
go
alter table #T drop column ID--删除标识列

--查看结果
select * from #T

/*
Num Name
----------- ----
1 A
2 B

(2 行受影响)

*/

--重新执行测试数据后用方法3
方法3:
declare Roy_Cursor cursor local for
select count(1)-1,Num,Name from #T group by Num,Name having count(1)>1
declare @con int,@Num int,@Name nvarchar(1)
open Roy_Cursor
fetch next from Roy_Cursor into @con,@Num,@Name
while @@Fetch_status=0
begin
set rowcount @con;
delete #T where Num=@Num and Name=@Name
set rowcount 0;
fetch next from Roy_Cursor into @con,@Num,@Name
end
close Roy_Cursor
deallocate Roy_Cursor

--查看结果
select * from #T
/*
Num Name
----------- ----
1 A
2 B

(2 行受影响)
*/
jackbaby 2009-07-06
  • 打赏
  • 举报
回复
變成數據為

no partno other num1
1 3 kkk 1
1 4 mkl 5
jackbaby 2009-07-06
  • 打赏
  • 举报
回复
這樣的

no partno other num1
1 2 abcde 2
1 2 mmm 0
1 3 kkk 1
1 4 mkl 5
這樣的數據

其中no和partno如果是一樣的數據是不要的,這樣的sql要怎麼寫哈?可否用一個SQL哈?不用遊標


正好,還一個問題想請教大家,遊標有什麽好的哈??可以用其它程序代替哈?又醜陋又不能調試的(sql2000)最不喜歡用了,呵呵
Tomzzu 2009-07-06
  • 打赏
  • 举报
回复
到底是去掉, 还是不去掉, 还是只保留一条, 前面两个值虽然相同, 但后面的值不尽相同, LZ到底想做什么呢
JonasFeng 2009-07-06
  • 打赏
  • 举报
回复
什么意思?
jiangshun 2009-07-06
  • 打赏
  • 举报
回复
不明白你的意思
htl258_Tony 2009-07-06
  • 打赏
  • 举报
回复
是不显示还是要更新?
guguda2008 2009-07-06
  • 打赏
  • 举报
回复
前面兩個字段相同的能不能不能去掉呢

这句看不明白

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧