我正在处理一个查询,该查询比较两个表并为每种类型的产品返回一行或零行。如果在比较两个表的值之后返回零,并且第二行至少有一个比第一个表更好的行,并且如果第一个表具有最佳行,则返回一行。
例如,我有两个表T1和T2,其中包含以下行
表T1
Id Market Term BidCP Bid Offer OfferCP
8 C1 Sep14/Oct14 Nothing -60 NULL NULL
1 C1 Sep14/Oct14 punt -50 NULL vgc
2 abc Sep14/Oct14 disc -390 -285 fvfvf
7 abc Sep14/Oct14 vgc -415 -185 vfvfv
10 abc Sep14/Oct14 ggX -415 NULL Pvfv66
11 abc Sep14/Oct14 frgth -440 NULL vvf
14 abc Q4 14/Q1 15 begrt -425 NULL vf
6 xyz-Cushing Sep14/Oct14 ererrrUS -100 NULL NULL
3 xyz-Cushing Sep14/Oct14 gth -75 NULL vfv
表T2
id product term bidcp bid offer offercp
3546 C1 Sep14 dddddddd -975 NULL XoOM
3562 C1 Sep14 erft -985 NULL NULL
3608 C1 Sep14 BPl NULL NULL jjjj
3574 C1 Oct14 NULL NULL -925 P6678
3603 abc Sep14/Oct14 CVXvg -350 -300 Shl
3621 abc Sep14/Oct14 NULL NULL NULL jnhj
在上面两个表上运行SQL查询后,结果应该是
Id Market Term BidCP Bid Offer OfferCP
14 abc Q4 14/Q1 15 begrt -425 NULL vf
1 C1 Sep14/Oct14 punt -50 NULL vgc
以上结果可以解释为
对于第一个表中的产品C1,没有带有术语Sep14/Oct14
的行,因此返回具有最高出价值然后最低出价值的行。
类似地,对于产品abc和术语Q4 14 / Q1 15.但是对于第一个表中的产品abc和术语Sep14/Oct14
,当与第二个表相同的产品和术语进行比较时,第二个表具有更好的出价和报价值,因此,结果中未返回该行
我正在使用以下查询,但他们没有产生预期的结果
SQL QUERY如下
select distinct t1.market,t1.Term,
(case when t1.Bid >= isnull(t2.bid,-99999) then t1.bid
else NULL
end) as bid,
(case when t1.offer <= (isnull(t2.offer,99999)) then t1.offer
else NULL
end) as offer
from (SELECT Market,Term, MAX(bid) as Bid, MIN(offer) as offer FROM InferredProductBids GROUP BY Market,Term) t1 left join
(SELECT product,Term, MAX(bid) as Bid, MIN(offer) as offer FROM CanadianCrudes GROUP BY product,Term) t2
on t1.Term = t2.Term and t1.Market=t2.Product
当我尝试执行上述查询时,出现以下错误
Column 'InferredBids.BidCP' is invalid in the select list because
it is not contained in either an aggregate function or the GROUP BY clause.
当我尝试在BidCP
条款中加入OfferCP
和Group by
时,我得到的结果很明显。
当我从OfferCP
和BidCP
语句中排除select
和group by
时我得到了准确的结果,但我想要BidCP
和{{1}要包含在我的结果中
有更好的方法吗?