我在SQL中遇到了一些问题
我的数据是这样的
| 公司|报告日期|源|
| --------------|--------------|--------------|
| 01|20071231|01|
| 01|20081231|01|
| 01|20081231|02|
| 02|20071231|02|
| 02|20081231|02|
| 03|20071231|01|
| 03|20071231|02|
我想选择'01'作为源列中的默认值。但如果不是,那么我想选择源'02'
我想要的结果是这样的
| 公司|报告日期|源|
| --------------|--------------|--------------|
| 01|20071231|01|
| 01|20081231|01|
| 02|20071231|02|
| 02|20081231|02|
| 03|20071231|01|
谢谢
select company
, report date
, source
from (
select *,
count(*) over
(partition by company, report date, source) as b
from the table
where b > 1
我想不通这个结果是真是假
2条答案
按热度按时间6qqygrtg1#
也许按(公司和日期)按(源)排序行,以便01(如果存在)位于02或任何其他值之前,然后提取排名最高的行?
样本数据:
查询从这里开始:
huwehgph2#
如果我正确理解了你的问题,那么你需要所有具有
source
的最小值的行来对应company
。如果你只想要那些,其中
source
是最小的,但是01
或02
你可以添加条件: