我在编写查询时有点难过(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
和排序,我怎样才能得到不同的结果?NAME
SCOPE1
SCOPE2
SEQ
也就是说,给定SCOPE1 = 'Here'
and SCOPE2 = 'Room'
,我想得到这个结果:
CODE NAME
---------
A a
B b
C c
A aa
B bbb
注意:C c
from是不想要的,因为它是 to fromRoom
的副本。C c
Here
我确实意识到使用DISTINCT
with的局限性,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
。