Sql 比较两个表时返回不需要的值的查询
我正在处理一个查询,它比较两个表,并为每种类型的产品返回一行或零行。如果比较了两个表的值,并且第二行的行数至少比第一个表的行数好,则返回零;如果第一个表的行数最好,则返回一行 例如,我有两个带有以下行的表T1和T2 表T1Sql 比较两个表时返回不需要的值的查询,sql,sql-server,database,Sql,Sql Server,Database,我正在处理一个查询,它比较两个表,并为每种类型的产品返回一行或零行。如果比较了两个表的值,并且第二行的行数至少比第一个表的行数好,则返回零;如果第一个表的行数最好,则返回一行 例如,我有两个带有以下行的表T1和T2 表T1 Id Market Term BidCP Bid Offer OfferCP 8 C1 Sep14/Oct14 Nothing -60 NULL NULL 1 C
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查询如下所示
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
当我试图在GROUPBY子句中包含BidCP和OfferCP时,我得到了明显的不想要的结果
当我从select和group by语句中排除OfferCP和BidCP时,我得到了准确的结果,但我希望BidCP和OfferCP都包含在我的结果中。
有更好的方法吗?从子查询中删除BidCP和OfferCP。我假设market、term、maxbid和minoffer的组合使得记录独一无二……所以在这4个键上创建第三个从t1返回到InferredBids的连接。对加拿大人重复这些组合不是唯一的,它们可能相同或不同
Column 'InferredBids.BidCP' is invalid in the select list because
it is not contained in either an aggregate function or the GROUP BY clause.