好的,我不明白你想用这个实现什么,但我可以看到一些问题:
- 您正在整理每个“事物”的最高出价/最低出价,然后将它们加入到原始表格中。但这将不起作用,除非单行具有最高出价和最低出价;
- 您关于何时显示出价/出价的一些逻辑意味着您将在输出中包含 NULL,因此您应该会看到它们;
- 由于您使用的是负值(和负 NULL !!),因此您的值之间的比较似乎很混乱。
我将其放入您的查询的略微修改版本中,这可能有助于您找出问题所在?
DECLARE @InferredBids TABLE (Market VARCHAR(10), Term VARCHAR(20), BidCP VARCHAR(10), Bid FLOAT, Offer FLOAT, OfferCP VARCHAR(10));
INSERT INTO @InferredBids VALUES('C1', 'Sep14/Oct14', 'Nothing', -60, -40, '');
INSERT INTO @InferredBids VALUES('C1', 'Sep14/Oct14', 'punt', -50, NULL, 'vgc');
INSERT INTO @InferredBids VALUES('abc', 'Sep14/Oct14', 'disc', -390, -285, 'fvfvf');
INSERT INTO @InferredBids VALUES('abc', 'Sep14/Oct14', 'vgc', -415, -185, 'vfvfv');
INSERT INTO @InferredBids VALUES('abc', 'Q4 14/Q1 15', 'begrt', -425, NULL , 'vf');
DECLARE @CanadianCrudes TABLE (Product VARCHAR(10), Term VARCHAR(20), BidCP VARCHAR(10), Bid FLOAT, Offer FLOAT, OfferCP VARCHAR(10));
INSERT INTO @CanadianCrudes VALUES('C1','Sep14', 'dddddddd', -975, NULL,'xoom');
INSERT INTO @CanadianCrudes VALUES('C1','Sep14', 'efrt', -985, NULL, NULL);
INSERT INTO @CanadianCrudes VALUES('C1', 'Sep14', 'BPl', NULL, NULL, 'jjjj');
INSERT INTO @CanadianCrudes VALUES('abc', 'Sep14/Oct14', 'CVXvg', -350 , -300, 'Shl');
WITH t1 AS (
SELECT
Market,
Term,
MAX(Bid) AS MaxBid,
MIN(Offer) AS MinOffer
FROM
@InferredBids
GROUP BY
Market,
Term),
t2 AS (
SELECT
Product,
Term,
MAX(Bid) AS Bid,
MIN(Offer) AS Offer
FROM
@CanadianCrudes
GROUP BY
Product,
Term)
SELECT
t1.Market,
t1.Term,
ib.BidCP,
ib.Bid AS InferredBid,
cc.Bid AS CrudeBid,
CASE WHEN ib.Bid >= ISNULL(cc.Bid, 0) THEN t1.MaxBid ELSE NULL END AS CalculatedBid,
t1.MaxBid,
ib.Offer AS InferredOffer,
cc.Offer AS CrudeOffer,
CASE WHEN ib.Offer <= ISNULL(cc.Offer, 0) THEN t1.MinOffer ELSE NULL END AS CalculatedOffer,
ib.OfferCP
FROM
t1
LEFT JOIN t2 ON t1.Market = t2.Product
LEFT JOIN @InferredBids ib ON ib.Market = t1.Market AND ib.Term = t1.Term AND ib.Bid = t1.MaxBid --AND ib.offer = t1.minoffer
LEFT JOIN @CanadianCrudes cc ON cc.Product = t2.Product AND cc.Term = t2.Term AND cc.Bid = t2.Bid; --AND cc.offer = t2.offer
如果你运行它,你会得到类似这样的东西:
Market Term BidCP InferredBid CrudeBid CalculatedBid MaxBid InferredOffer CrudeOffer CalculatedOffer OfferCP
abc Q4 14/Q1 15 begrt -425 -350 NULL -425 NULL -300 NULL vf
abc Sep14/Oct14 disc -390 -350 NULL -390 -285 -300 NULL fvfvf
C1 Sep14/Oct14 punt -50 -975 -50 -50 NULL NULL NULL vgc