我在编写查询时有点难过(SQL 不是我的强项)。
说我有以下内容TABLE1:
CODE NAME SCOPE1 SCOPE2 SEQ
------------------------------------
A a Here 1
B b Here 2
C c Here 3
C c Room 1
A aa Room 2
B bbb Room 3
业务关键是CODE + SCOPE1 + SCOPE2, whereSCOPE1和SCOPE2总是相互排斥的。
鉴于我需要按、CODE和排序,我怎样才能得到不同的结果?NAMESCOPE1SCOPE2SEQ
也就是说,给定SCOPE1 = 'Here'and SCOPE2 = 'Room',我想得到这个结果:
CODE NAME
---------
A a
B b
C c
A aa
B bbb
注意:C cfrom是不想要的,因为它是 to fromRoom的副本。C cHere
我确实意识到使用DISTINCTwith的局限性,ORDER BY我能想到的最好的方法如下:
select distinct CODE, NAME from
(
select CODE, NAME from MYTABLE
where (SCOPE1='Here' or SCOPE2='Room')
order by SCOPE1, SCOPE2, SEQ
);
以上产生了正确的对,但顺序错误。我试着弄乱GROUP BY,但我想我知道的还不够。
我必须坚持使用标准 SQL(也就是说,没有特定于产品的 SQL 构造,除非它可能是 Oracle),而且我想对于这个特定的查询,可能无法避免子选择。
我将非常感谢任何指示。提前致谢。
更新:我已经更新了数据集,并根据彼得姆的回答,这是我目前所拥有的:sqlfiddle。当我开始调整序列时,MIN/MAX 技巧不起作用。
假设是我将始终搜索一个特定SCOPE1的与一个特定的配对SCOPE2。但我需要所有SCOPE1记录都出现在之前SCOPE2。这个想法是我不在乎是CODE + NAME来自SCOPE1还是SCOPE2- 我只想要按 , 和 排序的SCOPE1唯一SCOPE2对SEQ。