试图获得第二高的零件成本。
我有什么:
[PART](
[PartNbr] [numeric](18, 0) NULL,
[Description] [varchar](50) NULL,
[Cost] [numeric](18, 2) NULL,
[SalesPrice] [numeric](18, 2) NULL
数据:
nodeName()
我试图找回PartNbr和成本第二高的描述。我似乎只能找回成本最低的PartNbr。
答案 0 :(得分:0)
我认为以下代码会为您提供所需的内容
SELECT partNbr, Description
FROM PART a
WHERE 2 = (SELECT COUNT(DISTINCT cost) FROM PART b
WHERE a.cost<=b.cost)
答案 1 :(得分:0)
ROW_NUMBER()
会让这更容易:
SELECT PartNbr, Description
FROM (SELECT PartNbr,
Description,
ROW_NUMBER() OVER (ORDER BY COST DESC) RN
FROM Part) P
WHERE RN = 2
这可以通过根据成本分配行号,然后选择成本第二高的行(RN = 2
)来实现
另一种方式,更接近你所拥有的,是:
SELECT TOP 1 PartNbr, Description
FROM Part
WHERE Cost IN (SELECT TOP 2 Cost
FROM Part
ORDER BY Cost DESC)
ORDER BY Cost ASC
但这对我来说似乎相当混乱。我会坚持使用第一个选项,因为它很容易扩展到其他成本(RN = 18
,如果你想要第18个最高成本部分等等。)