2015-06-10 71 views
1

我有一個包含硬件項目的表。該物品及其製造商與價格一起包含在表格中。我需要退還製造商的名字,其中一件物品比另一件貴。當1值大於另一個值時返回

例如,在下表中,我只想返回製造商的名稱,當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 
+0

使用子查詢 - 發佈失敗 – amdixon

回答

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) 
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 
相關問題