当1值大于另一个值时返回

时间:2015-06-10 09:45:10

标签: sql sql-server-2008

我有一个包含硬件项目的表。该项目及其制造商与价格一起包含在表格中。我需要退回制造商的名字,当其中一个项目比另一个项目更贵时。

例如,在下表中,我只想在10mm的成本高于5mm时返回制造商的名称。

表格

╔══════════════╦══════╦═══════╗
║ Manufacturer ║ Size ║ Cost  ║
╠══════════════╬══════╬═══════╣
║ Acme         ║ 5mm  ║ 10.00 ║
║ Acme         ║ 10mm ║ 20.00 ║
║ AAA          ║ 5mm  ║ 15.00 ║
║ AAA          ║ 10mm ║ 14.00 ║
║ BBB          ║ 5mm  ║ 17.00 ║
║ BBB          ║ 10mm ║ 20.00 ║
╚══════════════╩══════╩═══════╝

这个例子,我只想退回那些价格较高的10毫米物品的制造商。所以上面的表只返回2行:

所需输出

Acme 
BBB

2 个答案:

答案 0 :(得分:3)

您可以像这样使用GROUP BY

SELECT Manufacturer 
FROM Tbl
GROUP BY Manufacturer 
HAVING MAX(CASE WHEN Size = '10mm' THEN Cost END) > MAX(CASE WHEN Size = '5mm' THEN Cost END)

答案 1 :(得分:0)

您可以使用row_number窗口功能:

select * from
    (select *, row_number() over(partition by Manufacturer order by Cost desc) rn 
     from TableName) t
where rn = 1 and size = 10