能否一個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
前面兩個字段相同的能不能不能去掉呢?想了很多辦法,都不行,鬱悶謝謝大家了

解决方案 »

  1.   

    這樣的 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)最不喜歡用了,呵呵
      

  2.   

    變成數據為no    partno    other    num1 
    1      3        kkk      1 
    1      4        mkl      5 
      

  3.   

    --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 行受影响)
    */
      

  4.   

    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
      

  5.   


    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',5select * 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
      

  6.   

    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 個資料列受到影響)*/
      

  7.   


    ---------------------------------
    --  Author: htl258(Tony)
    --  Date  : 2009-07-06 15:30:25
    ---------------------------------
    --> 生成测试数据表-tbif 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 行受影响)
    */
      

  8.   


    謝謝各位兄弟,我借用了wufeng4552兄的,可以用的,謝謝大家!
      

  9.   

    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
    )
      

  10.   

    --測試數據
    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