查询在比较两个表时返回不需要的值

时间:2014-08-11 17:29:39

标签: sql sql-server database

我正在处理一个查询,该查询比较两个表并为每种类型的产品返回一行或零行。如果在比较两个表的值之后返回零,并且第二行至少有一个比第一个表更好的行,并且如果第一个表具有最佳行,则返回一行。

例如,我有两个表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条款中加入OfferCPGroup by时,我得到的结果很明显。

当我从OfferCPBidCP语句中排除selectgroup by时我得到了准确的结果,但我想要BidCP和{{1}要包含在我的结果中 有更好的方法吗?

0 个答案:

没有答案