Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有最高优先级的SQLrange查询_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

具有最高优先级的SQLrange查询

具有最高优先级的SQLrange查询,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,需要以下查询方面的帮助,请考虑我的表中的以下内容,即“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 tbProd

需要以下查询方面的帮助,请考虑我的表中的以下内容,即“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
这是我的

有人能告诉我如何得到预期的结果吗?因为我对如何尝试这一点感到困惑


谢谢

您可以在
ORDER BY
子句中将
行号
大小写
表达式一起使用,以便优先排序:

;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

您可以创建一个优先级表,并使用
行数
带领带的TOP 1

Declare @Priority as Table
(
    [COUNTRY_CODE] varchar(10),
    Priority int    
)

Insert Into @Priority VALUES ('US', 1), ('UK', 2),('SG', 3)


select TOP (1) WITH TIES 
       tp.* 
from tbProduct tp
Inner join @Priority p on tp.[COUNTRY_CODE] = p.[COUNTRY_CODE]
Order by row_number() over(partition by tp.CCY ORDER BY p.Priority)

演示链接:

优先级是什么意思?我不明白。如果有一个国家代码为US、UK和SG的外汇汇率,他希望得到国家代码为US的行的外汇汇率,因为我没有正确解释自己,所以US>1,UK>2,SG>3基本上是一个关键指标。我需要编写一个SQL查询,返回与每种货币的关键指标接近的值。我已经向大家展示了预期的结果。我希望这有助于这是一个,在继续之前考虑接受答案。“Esteban P.,你能用我的小提琴告诉我如何取得结果吗?”