现在有一个表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不一致的行谢谢~~
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不一致的行谢谢~~
解决方案 »
- 谁能帮我用oracle搭建一套工作流引擎所需要的数据库表结构啊?
- 建了一个PUBLIC的DBLINK,假如说有20个用户,我想让其中的一个不能使用DBLINK,怎么办?
- 动态SQL能执行,非动态SQL执行不了??
- 请求大家给一个使用vc开发proc*c的例子(针对oracle9i)!!真的很感谢大家!
- 关于"ORA-00106: 无法在连接到调度程序时启动/关闭数据库"的问题
- 求教oracle8i怎么样同时启用两个以上的数据库
- oracle有存储过程吗?
- 怎样取得距离现在最久的五条记录(分有时间字段pdate和无时间字段两种)
- 有关台帐的讨论,做过的和没做过的都进来说两句.
- 这样的语句效率如何,如何优化?
- 因为之前的描述不清楚,重新发帖求助SQL。。。
- 各位大神求教 PLS-00103
select *
from TABLE
group by P_CODE ,
OP_CODE ,
U_TYPE ,
U_GRP
from TABLE
group by P_CODE ,
OP_CODE ,
U_TYPE ,
U_GRP
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;
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
我想得到的结果是:
数据:
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
如果是只想返回一组的话 应该明确, 这样 在 where 里边加上一个过滤就行了
(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
根据你的结果描述
你是想
P_CODE||OP_CODE||U_TYPE||U_GRP 这样连接起来相等吧
请澄清一下你的需求,不然这东西估计没法写了。
(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或者其他的办法得到两个结果的交集。
可以试试
这张表中,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
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
)
执行下这个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
这张表中,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
不是指QTY <> LOCATION