You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中无公共列两表关联:查询笔记本的INR价格

SQL Server 查询解决方案

表结构与数据

USPricing表(仅存储美元计价价格)

字段:ProductId, ProductTitle, Currency, Market, UnitPrice
数据:

1, 'Laptop', 'USD', 'US', 500
2, 'Computer', 'USD', 'US', 300

ExchangeRate表(存储货币兑换汇率)

字段:CurrencyCode, USDPerUnit(表示1单位对应货币可兑换的美元数)
数据:

INR, 0.01208
EUR, 1.0541

查询需求

实现类似「查询笔记本的INR价格」的需求,预期输出:

Product, USD, INR
Laptop, 500, 41666

查询语句

固定产品与货币的查询

SELECT 
    up.ProductTitle AS Product,
    up.UnitPrice AS USD,
    ROUND(up.UnitPrice / er.USDPerUnit, 0) AS INR
FROM 
    USPricing up
CROSS JOIN 
    ExchangeRate er
WHERE 
    up.ProductTitle = 'Laptop'
    AND er.CurrencyCode = 'INR';

逻辑说明

  • 两张表无公共关联列,使用CROSS JOIN关联后,通过WHERE子句精准筛选目标产品与货币。
  • 汇率计算:USDPerUnit是1单位对应货币可兑换的美元数,因此美元转目标货币需用美元价格除以该汇率,ROUND函数用于取整得到整数结果。

参数化动态查询

如果需要灵活查询不同产品或货币,可使用参数化写法:

DECLARE @TargetProduct NVARCHAR(50) = 'Laptop';
DECLARE @TargetCurrency NVARCHAR(3) = 'INR';

SELECT 
    up.ProductTitle AS Product,
    up.UnitPrice AS USD,
    ROUND(up.UnitPrice / er.USDPerUnit, 0) AS [TargetCurrency]
FROM 
    USPricing up
CROSS JOIN 
    ExchangeRate er
WHERE 
    up.ProductTitle = @TargetProduct
    AND er.CurrencyCode = @TargetCurrency;

动态列名查询(可选)

若要让结果列名自动匹配目标货币,可使用动态SQL:

DECLARE @TargetProduct NVARCHAR(50) = 'Laptop';
DECLARE @TargetCurrency NVARCHAR(3) = 'INR';
DECLARE @SQL NVARCHAR(MAX);

SET @SQL = N'
SELECT 
    up.ProductTitle AS Product,
    up.UnitPrice AS USD,
    ROUND(up.UnitPrice / er.USDPerUnit, 0) AS ' + QUOTENAME(@TargetCurrency) + '
FROM 
    USPricing up
CROSS JOIN 
    ExchangeRate er
WHERE 
    up.ProductTitle = @Product
    AND er.CurrencyCode = @Currency;';

EXEC sp_executesql @SQL, 
    N'@Product NVARCHAR(50), @Currency NVARCHAR(3)',
    @Product = @TargetProduct,
    @Currency = @TargetCurrency;

内容的提问来源于stack exchange,提问作者Swasti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:12:38