现在有一个表TABLE,字段有G_CODE,U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATIONG_CODE,U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION
G001     C       01     P001   OP001    1       C2
G002     C       01     P001   OP001    1       C2
G003     C       01     P001   OP001    1       C3
G004     C       01     P001   OP001    1/3     C4
G005     C       02     P001   OP001    3       
我想查询出这张表中P_CODE +  OP_CODE + U_TYPE + U_GRP一致,但是QTY + LOCATION不一致的行谢谢~~

解决方案 »

  1.   


      select * 
        from TABLE
    group by P_CODE ,
             OP_CODE ,
             U_TYPE ,
              U_GRP
      

  2.   

     select *  
      from TABLE
    group by P_CODE ,
      OP_CODE ,
      U_TYPE ,
      U_GRP
      

  3.   

    创建表和准备数据-- Create table
    create table TABLE1
    (
      G_CODE   VARCHAR2(10) not null,
      U_TYPE   VARCHAR2(10),
      U_GRP    VARCHAR2(10),
      P_CODE   VARCHAR2(10),
      OP_CODE  VARCHAR2(10),
      QTY      VARCHAR2(10),
      LOCATION VARCHAR2(10)
    );insert into table1 (G_CODE, U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION)
    values ('G001', 'C', '01', 'P001', 'OP001', '1', 'C2');insert into table1 (G_CODE, U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION)
    values ('G002', 'C', '01', 'P001', 'OP001', '1', 'C2');insert into table1 (G_CODE, U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION)
    values ('G003', 'C', '01', 'P001', 'OP001', '1', 'C3');insert into table1 (G_CODE, U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION)
    values ('G004', 'C', '01', 'P001', 'OP001', '1/3', 'C4');insert into table1 (G_CODE, U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION)
    values ('G005', 'C', '02', 'P001', 'OP001', '3', '');
    commit;
      

  4.   


    select  distinct P_CODE ,OP_CODE, U_TYPE, U_GRP,
    --按P_CODE ,OP_CODE, U_TYPE, U_GRP,获取他们相同的行数
    sum(case when 1=1 then 1 else 0 end) over(partition by P_CODE, OP_CODE, U_TYPE, U_GRP)
    from (
    --表中P_CODE + OP_CODE + U_TYPE + U_GRP一致,但是QTY + LOCATION不一致的行
    --根据你表达的意思,去掉表中的重复数据
    select distinct P_CODE ,OP_CODE, U_TYPE, U_GRP, QTY, LOCATION
      from table1
      ) t
    结果
    P001 OP001 C 02 1
    P001 OP001 C 01 3
      

  5.   

    楼上,谢谢。。
    我想得到的结果是:
    数据:
    G_CODE,U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION
    G001     C       01     P001   OP001    1       C2
    G002     C       01     P001   OP001    1       C2
    G003     C       01     P001   OP001    1       C3
    G004     C       01     P001   OP001    1/3     C4
    G005     C       02     P001   OP001    3 ============================================================查询结果:
    G_CODE,U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION
    G001     C       01     P001   OP001    1       C2
    G002     C       01     P001   OP001    1       C2
    G003     C       01     P001   OP001    1       C3
    G004     C       01     P001   OP001    1/3     C4
      

  6.   

    楼主只想返回 一种 P_CODE + OP_CODE + U_TYPE + U_GRP 的组合么?
    如果是只想返回一组的话 应该明确, 这样 在 where 里边加上一个过滤就行了
      

  7.   

    楼主你表达的意思实在让我蛋疼,下面是我整理的SQL,我理解的是,那4列都相等,并且那2列不相等SELECT * FROM 
    (SELECT DISTINCT * FROM TABLE WHERE P_CODE=OP_CODE AND OPDE=U_TYPE AND U_TYPE=U_GRP) T1--表示P_CODE + OP_CODE + U_TYPE + U_GRP一致
    LEFT JOIN 
    (SELECT DISTINCT * FROM TABLE WHERE QTY<>LOCATION) T2--表示QTY + LOCATION不一致
    ON T1.G_CODE=T2.G_CODE
      

  8.   

    楼主的描述确实有问题
    根据你的结果描述
    你是想
    P_CODE||OP_CODE||U_TYPE||U_GRP 这样连接起来相等吧
    请澄清一下你的需求,不然这东西估计没法写了。
      

  9.   

    依据我以上的理解可以使用以下的SQL达到你的目的select t1.* from table1 t1,
     (select a.p_code||a.op_code||a.u_type||a.u_grp C1
            ,count(a.p_code||a.op_code||a.u_type||a.u_grp) C2 
     from table1 a
     group by a.p_code||a.op_code||a.u_type||a.u_grp
     having count(a.p_code||a.op_code||a.u_type||a.u_grp)>1) t2
     where t1.p_code||t1.op_code||t1.u_type||t1.u_grp=t2.C1 order by t1.g_code我只是根据你提供应该的结果来写的SQL,你要是还是想加上不等的信息可以用minus或者其他的办法得到两个结果的交集。
    可以试试
      

  10.   

    我想要的结果是:
    这张表中,U_TYPE, U_GRP, P_CODE, OP_CODE这四个字段都相同,但 QTY或者 LOCATION不相同的行。例如:数据G_CODE,U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION
    G001     C       01     P001   OP001    1       C2
    G002     C       01     P001   OP001    1       C2
    G003     C       01     P001   OP001    1       C3
    G004     C       01     P001   OP001    1/3     C4
    G005     C       02     P001   OP001    3
    G006     B       01     P005   OP005    1       B2
    G007     B       01     P005   OP005    1       B2
    G008     B       01     P005   OP005    1       B2
    G009     D       01     P006   OP006    1/3     C4
    G010     D       02     P006   OP006    3希望得到的结果是:
    G_CODE,U_TYPE, U_GRP, P_CODE, OP_CODE, QTY, LOCATION
    G001     C       01     P001   OP001    1       C2
    G002     C       01     P001   OP001    1       C2
    G003     C       01     P001   OP001    1       C3
    G004     C       01     P001   OP001    1/3     C4
    G009     D       01     P006   OP006    1/3     C4
    G010     D       02     P006   OP006    3下面这些行,因为在U_TYPE, U_GRP, P_CODE, OP_CODE相同的情况下,QTY和LOCATION完全一致,因此不会被查询出来。
    G005     C       02     P001   OP001    3G006     B       01     P005   OP005    1       B2
    G007     B       01     P005   OP005    1       B2
    G008     B       01     P005   OP005    1       B2
      

  11.   

    gruop by 会缩减行 join 会扩展行 只能用exists 但是嵌套查询查询效率太低
    select * 
    from t1 a
    where exists(
                 select 1 
                 from t1 b
                 where a.P_CODE=b.P_code
                       and a.U_TYPE=b.U_type
                       and a.U_GRP=b.U_grp
                       and a.OP_CODE=b.op_code
                       and (a.qty<>b.qyt or a.location<>b.location
                   )
      

  12.   


    执行下这个SQL,看是不是你要的结果。
    SELECT T1.G_CODE,T1.U_TYPE, T1.U_GRP, T1.P_CODE, T1.OP_CODE, T2.QTY, T2.LOCATION FROM  
    (SELECT DISTINCT G_CODE,U_TYPE,U_GRP,P_CODE,OP_CODE FROM TABLE WHERE P_CODE=OP_CODE AND OPDE=U_TYPE AND U_TYPE=U_GRP) T1
    LEFT JOIN  
    (SELECT DISTINCT G_CODE,QTY,LOCATION FROM TABLE WHERE QTY<>LOCATION) T2
    ON T1.G_CODE=T2.G_CODE
      

  13.   

    引用 12 楼 的回复:我想要的结果是:
    这张表中,U_TYPE, U_GRP, P_CODE, OP_CODE这四个字段都相同,但 QTY或者 LOCATION不相同的行。执行下这个SQL,看是不是你要的结果。
    SELECT T1.G_CODE,T1.U_TYPE, T1.U_GRP, T1.P_CODE, T1.OP_CODE, T2.QTY, T2.LOCATION FROM   
    (SELECT DISTINCT G_CODE,U_TYPE,U_GRP,P_CODE,OP_CODE FROM TABLE WHERE P_CODE=OP_CODE AND OPDE=U_TYPE AND U_TYPE=U_GRP) T1
    LEFT JOIN   
    (SELECT DISTINCT G_CODE,QTY,LOCATION FROM TABLE WHERE QTY<>LOCATION) T2
    ON T1.G_CODE=T2.G_CODE=====================================================================我的意思是: QTY不相等或者LOCATION不相等,不是指QTY <> LOCATION
      

  14.   

    我指的是不同行的QTY不相等,不同行的Location不相等。
    不是指QTY <> LOCATION