当前位置: 代码迷 >> Oracle管理 >> 求SQL语句-速来,多谢
  详细解决方案

求SQL语句-速来,多谢

热度:184   发布时间:2016-04-24 04:05:44.0
求SQL语句----------------------------------速来,谢谢
有如下表 T1 工人和工位可能有多种组合

工人        工位         产能
-----------------------------------------------
张三         A                       700
李四         A                       750
张三         B                       800
李四         B                       780

欲按如下条件求出结果:
1.每个工位上必须有且同时只能有一个工人在生产
2.求出产能最大的工人及工位组合

工人        工位         产能
-----------------------------------------------
李四         A                       750
张三         B                       800

即当李四在A工位 张三在B工位工作时 产能最大
------解决思路----------------------
CREATE TABLE test_01
(
工人 VARCHAR2(255),
工位 VARCHAR2(255),
产能 NUMBER(12)
);
INSERT INTO test_01 VALUES('张三','A',700);
INSERT INTO  test_01 VALUES('李四','A',750);
INSERT INTO test_01 VALUES('张三','B',800);
INSERT INTO test_01 VALUES('李四','B',780);

SELECT *
  FROM TEST_01 T1
 WHERE (T1.产能, T1.工位) IN
       (SELECT MAX(T.产能), T.工位 FROM TEST_01 T GROUP BY T.工位)

------解决思路----------------------
如果工位数量固定,比较简单。如果工位数量不固定,那就只能拼SQL语句了。
一个例子:
with table1 as (
select '张三' col1, 'A' col2, 700 col3 from dual union all
select '李四' col1, 'A' col2, 750 col3 from dual union all
select '张三' col1, 'B' col2, 800 col3 from dual union all
select '李四' col1, 'B' col2, 780 col3 from dual
)
select * from (
select a.col1 col1a, a.col2 col2a, a.col3 col3a, b.col1 col1b, b.col2 col2b, b.col3 col3b, a.col3+b.col3 col3all 
from table1 a full join table1 b on a.col1<>b.col1 and a.col2<>b.col2
order by col3all desc
)aaa where rownum=1

------解决思路----------------------
with table1 as (
select '张三' col1, 'A' col2, 700 col3 from dual union all
select '李四' col1, 'A' col2, 750 col3 from dual union all
select '张三' col1, 'B' col2, 800 col3 from dual union all
select '李四' col1, 'B' col2, 780 col3 from dual
)
select col1,
            col2,
            col3
 f rom (
select col1,
            col2,
            col3,
            row_number()over(partition by col2 order by col3 desc) rn
   from tabel1
)aaa where rn=1

------解决思路----------------------
这个涉及到了算法,很难用一句sql就写出来。
写个过程实现吧
  相关解决方案