当分组号发生变化时,就出现一个箭头,怎么用SQL语言实现?(10)

  • 主题发起人 主题发起人 kuaishang
  • 开始时间 开始时间
K

kuaishang

Unregistered / Unconfirmed
GUEST, unregistred user!
分组号 箭头 工序代码1 D0241 D0251 D0402 ==> D0142 D0172 D0203 ==> D0183 D0193 D0083 D0144 ==> D0105 ==> D016
 
先将分组后的数据放到临时表并给每条记录生成临时编号,然后查询出来每组编号的第一个的临时编号也放到临时表中,然后用case..when语句判断,每一条和临时编号相同的数据就给它加上箭头,这样即可实现你想要的功能了。
 
用临时表加存储过程肯定能实现,如果用临时表加一条SQL语句,有些难度。
 
如果oracle 中建个trig 然后,往记录表里写就是了
 
用触发器啊。。。还有加一个字段为bit类型,若变化设置bit字段值为1
 
用一条SQL好像比较因难吧,建个临时表,把数据放到临时表的时候再处理一下应该可以达到这种效果的.再显示临时表数据就可以了.
 
建了临时表,具体该怎么处理?
 
看来“分组号”“箭头”“工序代码”是你表的三个字段?如此就再建个临时表, 结构相同,将原数据按分组号升序追加进临时表,即可得按分组号排序的临时表;再用一个循环判断分组号一旦发生变化,即在该记录的“箭头”字段内加入 “==>”。可否。
 
假设表名为 Table1,字段为 (分组号,工序代码,顺序号),其中顺序号是指工序代码在当前分组中出现的先后顺序Select A.分组号, (Case when B.顺序 IS Not Null then '==>' else null end) as 箭头, A.工序代码From Table1 A Left Join (Select 分组号,Min(顺序号) 顺序 From Table1 Where 分组号 not in ( Select Min(分组号) from Table1 ) ) B On A.分组号=B.分组号 and A.顺序号=B.顺序Order by A.分组号,A.顺序号
 
数据库不一样的话,sql语句也会不一样。看到上面的znxia好像是sql server的,我就给出基于oracle的回答,数据库定义及数据GROUPNO ARROW PROCESSID1 D0241 D0251 D0402 D0142 D0172 D0203 D0183 D0193 D0083 D0144 D0105 D016执行用sql语句select GroupNo, case when RowNum = (select min(LineNo) from (select rownum LineNo, GroupNo, ProcessId from Table1 ) B where b.GroupNo = A.GroupNo) Then '==>' else ' ' end Arrow, Processid from table1 A执行结果GROUPNO ARROW PROCESSID1 ==> D0241 D0251 D0402 ==> D0142 D0172 D0203 ==> D0183 D0193 D0083 D0144 ==> D0105 ==> D016
 
TO:znxia 这个查询好像在sql server中不能执行吧?————————————————————————————Select 分组号,Min(顺序号) 顺序 From Table1 Where 分组号 not in ( Select Min(分组号) from Table1
 
呵呵,这么小的细节你也看出来了。Select A.分组号, (Case when B.顺序 IS Not Null then '==>' else null end) as 箭头, A.工序代码From Table1 A Left Join (Select 分组号,Min(顺序号) 顺序 From Table1 Where 分组号 not in ( Select Min(分组号) from Table1 ) group by 分组号 ) B On A.分组号=B.分组号 and A.顺序号=B.顺序Order by A.分组号,A.顺序号
 
多人接受答案了。
 
后退
顶部