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

Sql 比较两个表时返回不需要的值的查询,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

我正在处理一个查询,它比较两个表,并为每种类型的产品返回一行或零行。如果比较了两个表的值,并且第二行的行数至少比第一个表的行数好,则返回零;如果第一个表的行数最好,则返回一行

例如,我有两个带有以下行的表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查询如下所示

    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.