下列数据是一列火车的信息:车序号(每几节车)、发站、装的什么煤、货货人、收货人、列车流水作业编号
分组前:
1 张家口南 平3 A公司 测试 032008101701
2 张家口南 平3 A公司 测试 032008101701
3 张家口南 平3 A公司 测试 032008101701
4 张家口南 大精末 A公司 测试 032008101701
5 张家口南 大精末 A公司 测试 032008101701
6 张家口南 大精末 A公司 测试 032008101701
7 张家口南 大精末 A公司 测试 032008101701
8 张家口南 大精末 A公司 测试 032008101701
9 张家口南 大精末 A公司 测试 032008101701
10 张家口南 大精末 A公司 测试 032008101701分组后:
1-3 张家口南 平3 A公司 测试 032008101701
4-10 张家口南 大精末 A公司 测试 032008101701现在有这种情况:
1 张家口南 平3 A公司 测试 032008101701
2 张家口南 平3 A公司 测试 032008101701
3 张家口南 平3 A公司 测试 032008101701
4 张家口南 大精末 A公司 测试 032008101701
5 张家口南 大精末 A公司 测试 032008101701
6 张家口南 大精末 A公司 测试 032008101701
7 张家口南 平3 A公司 测试 032008101701
8 张家口南 平3 A公司 测试 032008101701
9 张家口南 大精末 A公司 测试 032008101701
10 张家口南 大精末 A公司 测试 032008101701
怎么能使用SQL语句查询出这样的数据
1-3 张家口南 平3 A公司 测试 032008101701
4-6 张家口南 大精末 A公司 测试 032008101701
7-8 张家口南 平3 A公司 测试 032008101701
8-10 张家口南 大精末 A公司 测试 032008101701我现在的SQL语句是这样的,但实现不了对车序号正常的统计
select min(s.ftrainordernum) || '-' || max(s.ftrainordernum) ftrainordernum, --车序号范围
stastation.fnamevcr fstatstastionname, --发站名称
coaltype.fnamevcr fcoalname, --煤种名称
comegounit1.fnamevcr fconsignername, --发货人名称
comegounit2.fnamevcr fconsigneename, --收货人名称
s.ftraincodevcr, --列车编码
s.fclientcodenum fclientcode, --入帐人代码
comegounit3.fnamevcr fclientname --入帐人名称
from t_ci_train_s s--关联发站表
left outer join t_b_stastation stastation on stastation.fcodenum = s.fstatstastioncodenum--关联煤种表
left outer join t_c_coaltype coaltype on coaltype.fcodevcr = s.fcoalcodevcr--关联往来单位表
left outer join t_b_comegounit comegounit1 on comegounit1.fcodenum = s.fconsignernum
left outer join t_b_comegounit comegounit2 on comegounit2.fcodenum = s.fconsigneenum
left outer join t_b_comegounit comegounit3 on comegounit3.fcodenum = s.fclientcodenumgroup by stastation.fnamevcr,
coaltype.fnamevcr,
comegounit1.fnamevcr,
comegounit2.fnamevcr,
s.ftraincodevcr,
s.fclientcodenum,
comegounit3.fnamevcr
order by ftrainordernum
分组前:
1 张家口南 平3 A公司 测试 032008101701
2 张家口南 平3 A公司 测试 032008101701
3 张家口南 平3 A公司 测试 032008101701
4 张家口南 大精末 A公司 测试 032008101701
5 张家口南 大精末 A公司 测试 032008101701
6 张家口南 大精末 A公司 测试 032008101701
7 张家口南 大精末 A公司 测试 032008101701
8 张家口南 大精末 A公司 测试 032008101701
9 张家口南 大精末 A公司 测试 032008101701
10 张家口南 大精末 A公司 测试 032008101701分组后:
1-3 张家口南 平3 A公司 测试 032008101701
4-10 张家口南 大精末 A公司 测试 032008101701现在有这种情况:
1 张家口南 平3 A公司 测试 032008101701
2 张家口南 平3 A公司 测试 032008101701
3 张家口南 平3 A公司 测试 032008101701
4 张家口南 大精末 A公司 测试 032008101701
5 张家口南 大精末 A公司 测试 032008101701
6 张家口南 大精末 A公司 测试 032008101701
7 张家口南 平3 A公司 测试 032008101701
8 张家口南 平3 A公司 测试 032008101701
9 张家口南 大精末 A公司 测试 032008101701
10 张家口南 大精末 A公司 测试 032008101701
怎么能使用SQL语句查询出这样的数据
1-3 张家口南 平3 A公司 测试 032008101701
4-6 张家口南 大精末 A公司 测试 032008101701
7-8 张家口南 平3 A公司 测试 032008101701
8-10 张家口南 大精末 A公司 测试 032008101701我现在的SQL语句是这样的,但实现不了对车序号正常的统计
select min(s.ftrainordernum) || '-' || max(s.ftrainordernum) ftrainordernum, --车序号范围
stastation.fnamevcr fstatstastionname, --发站名称
coaltype.fnamevcr fcoalname, --煤种名称
comegounit1.fnamevcr fconsignername, --发货人名称
comegounit2.fnamevcr fconsigneename, --收货人名称
s.ftraincodevcr, --列车编码
s.fclientcodenum fclientcode, --入帐人代码
comegounit3.fnamevcr fclientname --入帐人名称
from t_ci_train_s s--关联发站表
left outer join t_b_stastation stastation on stastation.fcodenum = s.fstatstastioncodenum--关联煤种表
left outer join t_c_coaltype coaltype on coaltype.fcodevcr = s.fcoalcodevcr--关联往来单位表
left outer join t_b_comegounit comegounit1 on comegounit1.fcodenum = s.fconsignernum
left outer join t_b_comegounit comegounit2 on comegounit2.fcodenum = s.fconsigneenum
left outer join t_b_comegounit comegounit3 on comegounit3.fcodenum = s.fclientcodenumgroup by stastation.fnamevcr,
coaltype.fnamevcr,
comegounit1.fnamevcr,
comegounit2.fnamevcr,
s.ftraincodevcr,
s.fclientcodenum,
comegounit3.fnamevcr
order by ftrainordernum
DROP TABLE tx3;
CREATE TABLE tx3(n INT,station VARCHAR2(30),TYPE VARCHAR2(30),fa VARCHAR2(30),shou VARCHAR2(30),hao VARCHAR2(30));
insert into tx3 values('1','张家口南','平3','A公司','测试','032008101701');
insert into tx3 values('2','张家口南','平3','A公司','测试','032008101701');
insert into tx3 values('3','张家口南','平3','A公司','测试','032008101701');
insert into tx3 values('4','张家口南','大精末','A公司','测试','032008101701');
insert into tx3 values('5','张家口南','大精末','A公司','测试','032008101701');
insert into tx3 values('6','张家口南','大精末','A公司','测试','032008101701');
insert into tx3 values('7','张家口南','平3','A公司','测试','032008101701');
insert into tx3 values('8','张家口南','平3','A公司','测试','032008101701');
insert into tx3 values('9','张家口南','大精末','A公司','测试','032008101701');
insert into tx3 values('10','张家口南','大精末','A公司','测试','032008101701');
COMMIT;DECLARE
CURSOR L_C IS
SELECT * FROM TX3 ORDER BY N;
L_R1 TX3%ROWTYPE;
L_R2 TX3%ROWTYPE;
BEGIN
FOR I IN L_C LOOP
IF L_R1.N IS NOT NULL THEN
L_R2 := L_R1;
END IF;
L_R1 := I;
IF L_R1.STATION = L_R2.STATION AND L_R1.TYPE = L_R2.TYPE AND
L_R1.FA = L_R2.FA AND L_R1.SHOU = L_R2.SHOU AND L_R1.HAO = L_R2.HAO THEN
NULL;
ELSE
IF L_R2.N IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('-' || L_R2.N || ' ' || L_R2.STATION || ' ' ||
L_R2.TYPE || ' ' || L_R2.FA || ' ' ||
L_R2.SHOU || ' ' || L_R2.HAO);
END IF;
IF L_R1.N IS NOT NULL THEN
DBMS_OUTPUT.PUT(L_R1.N);
END IF;
END IF;
END LOOP;
IF L_R1.N IS NOT NULL THEN
DBMS_OUTPUT.PUT_LINE('-' || L_R1.N || ' ' || L_R1.STATION || ' ' ||
L_R1.TYPE || ' ' || L_R1.FA || ' ' || L_R1.SHOU || ' ' ||
L_R1.HAO);
END IF;
END;
/--输出:
1-3 张家口南 平3 A公司 测试 032008101701
4-6 张家口南 大精末 A公司 测试 032008101701
7-8 张家口南 平3 A公司 测试 032008101701
9-10 张家口南 大精末 A公司 测试 032008101701
SQL> SELECT * FROM TABLE_NAME;FTRAINORDERNUM FNAME FNAMESTATION FNAMEVCR GNAMEVCR FTRAINCODEVCR
-------------- -------- ------------ -------- -------- -------------
1 ZJK_NEST PING3 ACOMPANY TEST 032008101701
2 ZJK_NEST PING3 ACOMPANY TEST 032008101701
3 ZJK_NEST PING3 ACOMPANY TEST 032008101701
4 ZJK_NEST DAJINGMO ACOMPANY TEST 032008101701
5 ZJK_NEST DAJINGMO ACOMPANY TEST 032008101701
6 ZJK_NEST DAJINGMO ACOMPANY TEST 032008101701
7 ZJK_NEST PING3 ACOMPANY TEST 032008101701
8 ZJK_NEST PING3 ACOMPANY TEST 032008101701
9 ZJK_NEST DAJINGMO ACOMPANY TEST 032008101701
10 ZJK_NEST DAJINGMO ACOMPANY TEST 03200810170110 rows selectedSQL> SELECT MIN(FTRAINORDERNUM)||'-'||MAX(FTRAINORDERNUM) FTRAINORDERNUM,
2 FNAME,
3 FNAMESTATION,
4 FNAMEVCR,
5 GNAMEVCR,
6 FTRAINCODEVCR
7 FROM (SELECT TT.*,
8 FTRAINORDERNUM-ROW_NUMBER() OVER(PARTITION BY FNAME,FNAMEVCR,GNAMEVCR,FTRAINCODEVCR,FNAMESTATION ORDER BY FTRAINORDERNUM) RN
9 FROM TABLE_NAME TT
10 )ZZ
11 GROUP BY FNAME,
12 FNAMESTATION,
13 FNAMEVCR,
14 GNAMEVCR,
15 FTRAINCODEVCR,
16 RN
17 ORDER BY 1;FTRAINORDERNUM FNAME FNAMESTATION FNAMEVCR GNAMEVCR FTRAINCODEVCR
------------------ ---------- ------------ -------- -------- -------------
1-3 ZJK_NEST PING3 ACOMPANY TEST 032008101701
4-6 ZJK_NEST DAJINGMO ACOMPANY TEST 032008101701
7-8 ZJK_NEST PING3 ACOMPANY TEST 032008101701
9-10 ZJK_NEST DAJINGMO ACOMPANY TEST 032008101701
SELECT min_n || '-' max_n
,station
,type
,fa
,shou
,hao
FROM
(
SELECT station
,type
,fa
,shou
,hao
,min(n) min_n
,max(n) max_n
FROM tx3
GROUP BY station, type, fa, shou, hao
)
可以结贴了,4楼朋友正解,在这谢过~
还有好多东西要学呀,看了这个ROW_NUMBER() OVER(PARTITION BY有些发蒙,希望4楼的maintisXF朋友能给帮助~