一列的每个值仅返回一行,不同列中的其他值仅返回一行

必须

我正在对具有几列和几行数据的SQL表进行查询,并且查询根据查询中给出的条件为每个唯一的第一列和第二列返回一行。

例如,我有下表 CC

product  term   bid  offer bidcp offercp
AA       sep14  20    10    x   y
AA       Sep14  15     9    p   q  
BA       Sep14  30    15    as  ps
XY       Sep14  25    15    r   t
XY       Oct14   30   20    t    r
XY       Oct14   25   22    p   q

当我在上表中运行查询时,它应返回以下数据

product  term   bid  offer bidcp offercp
AA       sep14  20    9      x   q(coming from a record which has lowest offer) 
BA       Sep14  30    15      as  ps
XY       Sep14  25    15      r   t
XY       Oct14  30    20      t    r

当我执行以下查询其分组的数据,CC甚至bidcp和offercp并返回几乎所有的行既offercpbidcp一种或另一种方式是独一无二的,但我只是想bidcpoffercp是在那里bidoffer从假设对两者的来了bid,并offer每个产品和字词都是唯一的

select product,term,max(bid) as bid,min(offer) as offer,bidcp,offercp from canadiancrudes where product like '%/%' group by product,term,bidcp,offercp 

但是,当我从groupby子句中删除了bidcp和offercp时,它给我带来了一个明显的错误

Column 'CC.BidCP' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

有更好的解决方法吗?

塔布·阿勒曼

在这种情况下,您需要2个CTE:

WITH o AS (
      SELECT product,term,offer,offercp, ROW_NUMBER() OVER (PARTITION BY product, term ORDER BY offer ASC) AS rn
      FROM  canadiancrudes where product like '%/%'
)
,   b AS (
      SELECT product,term,bid,bidcp, ROW_NUMBER() OVER (PARTITION BY product, term ORDER BY bid DESC) AS rn
      FROM  canadiancrudes where product like '%/%'
)
    SELECT o.product,o.term,b.bid,o.offer,b.bidcp,o.offercp 
    FROM o
    INNER JOIN b 
      ON o.product=b.product
      AND o.term=b.term
    WHERE o.rn=1
    AND b.rn=1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL:仅当在同一行中另一列具有不同的值时,才返回一列的值

将一列不同行中的值用作不同列中的值,但仅一行

如何仅返回组中第一行的值

搜索必须在一行中存在的2个值,然后从其他列返回一个值

如何使用一列查找行并在另一列中返回同一行的值

如何使用熊猫返回与同一行的其他列值输入一起返回的列值?

从存储过程返回的表中获取第一列,第一行的值

在第1行中仅返回一次列值,而对于其他行则返回NULL

对于每一行,我想为列中的每个值添加其他行

在列中查找值,然后返回同一行但不同列的值

如何使用前一行的值以及同一行中其他列的值来计算熊猫中一列的值

选择最小值并仅返回第一行

While循环仅返回第一行值

对于列中的每个值仅复制第一行

为每个主题ID添加额外的一行,并保留其他列中的值

SSMS:如何仅返回每月/每年的最后一行而不是每一行的值?

根据列值,每个分组列仅保留一行

如何使用R中的geom_bar仅着色(填充)不同颜色的一列(数据框中的值属于一行)?

SQL使用max返回多列,但每个用户仅一行

如何在ecxel“vlookup”中搜索多个列并从同一行的另一列返回值?

sql select min,从同一行中不同列的分组返回值

通过搜索不同的列返回同一行中的值

使用其他列中的仅一行减去该列

为每个不同的列值选择第一行

列范围X的值匹配到同一行但列范围不同的返回值

如何从一列中的不同值采样而仅返回另一列中唯一的记录?

MySQL仅返回一行(最近的一行)

复制data.table中每个组的最后一行,并更改一列的值

Oracle-仅返回每个产品的第一行