作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
需要有关以下查询的帮助,请考虑我的表上名为“tbProduct”的以下内容。
CCY COUNTRY_CODE FX_RATE
EUR SG 0.80
USD UK 0.50
USD US 1.00
USD SG 0.60
GBP UK 1.00
GBP SG 1.40
上面的 SQL 表格;
CREATE TABLE tbProduct
([CCY] varchar(8), [COUNTRY_CODE] varchar(8), [FX_RATE] varchar(8))
;
INSERT INTO tbProduct
([CCY], [COUNTRY_CODE], [FX_RATE])
VALUES
('EUR', 'SG', '0.80'),
('USD', 'UK', '0.50'),
('USD', 'US', '1.00'),
('USD', 'SG', '0.60'),
('GBP', 'UK', '1.00'),
('GBP', 'SG', '1.40')
;
我需要根据分配给国家/地区代码的优先级从上表中获取每种货币的汇率;我的想法是选择与每种货币具有最高优先级的国家相对应的汇率。例如本例中的优先级;
US > 1, UK > 2, SG > 3
所以理想情况下我正在寻找 SQL 查询来呈现以下预期结果。
CCY COUNTRY_CODE FX_RATE
EUR SG 0.80
USD US 1.00
GBP UK 1.00
这是我的fiddle .
有人可以告诉我如何获得预期的结果吗?因为我对如何尝试这个感到困惑。
谢谢
最佳答案
您可以在 ORDER BY
子句中使用 ROW_NUMBER
和 CASE
表达式来确定优先级:
;WITH CTE AS (
SELECT CCY, COUNTRY_CODE, FX_RATE,
ROW_NUMBER() OVER (PARTITION BY CCY
ORDER BY CASE COUNTRY_CODE
WHEN 'US' THEN 1
WHEN 'UK' THEN 2
WHEN 'SG' THEN 3
END) AS rn
FROM tbProduct
)
SELECT *
FROM CTE
WHERE rn = 1
关于具有最高优先级的 SQLrange 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44628310/
需要有关以下查询的帮助,请考虑我的表上名为“tbProduct”的以下内容。 CCY COUNTRY_CODE FX_RATE EUR SG 0.80 USD
我是一名优秀的程序员,十分优秀!