Sql server 连接3个表并按最大列值分组
谢谢你回答我之前的问题。我希望这样做没问题,但我现在有另一个相关问题: 我现在被要求扩展我正在做的工作,包括将以当地货币持有的格罗斯科斯特转换为英镑的基础货币 我分别拥有这两部分的SQL,但不知道如何组合它们。这两部分是:Sql server 连接3个表并按最大列值分组,sql-server,Sql Server,谢谢你回答我之前的问题。我希望这样做没问题,但我现在有另一个相关问题: 我现在被要求扩展我正在做的工作,包括将以当地货币持有的格罗斯科斯特转换为英镑的基础货币 我分别拥有这两部分的SQL,但不知道如何组合它们。这两部分是: 获取每家公司的总成本: SELECT * FROM (SELECT CompanyName,CurrencyCode,ExchangeRate3,ActiveDate, rank() OVER (partition BY Company
SELECT *
FROM (SELECT CompanyName,CurrencyCode,ExchangeRate3,ActiveDate,
rank() OVER
(partition BY CompanyName,dbo.Currencies.CurrencyId
ORDER BY ActiveDate DESC) AS Rank
FROM dbo.company
INNER JOIN dbo.Currencies
ON dbo.company.CurrencyId = dbo.Currencies.CurrencyId
INNER JOIN dbo.CurrencyRates
ON dbo.Currencies.CurrencyId = dbo.CurrencyRates.CurrencyFromId) ci
WHERE ci.Rank = 1
选择Cast(ROW_NUMBER()OVER(ORDER BY Sum(JobCosting.PurchaseOrderItems.GrossCost)Desc)作为Int)作为“RowNum”,
Admin.companys.UniqueName为“UN”,
总计(JobCosting.PurchaseOrderItems.GrossCost)为“DonutValue”
来自管理公司
Admin.companys.CompanyId上的内部联接JobCosting.PurchaseOrders=
作业成本计算.采购订单.供应商公司ID
内部联接JobCosting.PurchaseOrderItems
关于JobCosting.PurchaseOrders.PurchaseOrderId=
JobCosting.PurchaseOrderItems.PurchaseOrderId
其中UniqueName像“HH%”
按唯一名称分组
按“DonutValue”说明订购
提前感谢使用类似的方法-
WITH cte AS (
SELECT c.*, --column_list
ROW_NUMBER(ORDER BY cur_from.ActiveDate desc) row_num
FROM Company c
INNER JOIN Currencies cu ON c.CurrencyId = cu.CurrencyId
INNER JOIN CurrencyRates cu_from ON cu.CurrencyId = cu_from.CurrencyFromId
-- WHERE CONDITION if any
)
SELECT * FROM cte WHERE row_num = 1
这将为您提供每家公司每种货币代码的最新汇率:
SELECT *
FROM (SELECT CompanyName,CurrencyCode,ExchangeRate3,ActiveDate,
rank() OVER
(partition BY CompanyName,dbo.Currencies.CurrencyId
ORDER BY ActiveDate DESC) AS Rank
FROM dbo.company
INNER JOIN dbo.Currencies
ON dbo.company.CurrencyId = dbo.Currencies.CurrencyId
INNER JOIN dbo.CurrencyRates
ON dbo.Currencies.CurrencyId = dbo.CurrencyRates.CurrencyFromId) ci
WHERE ci.Rank = 1
编辑以包含请求的其他信息:
with cte as (
Select Cast(ROW_NUMBER() OVER
(ORDER BY Sum(JobCosting.PurchaseOrderItems.GrossCost) Desc) AS Int) As 'RowNum',
Admin.Companies.UniqueName As 'UN',
Sum(JobCosting.PurchaseOrderItems.GrossCost) As 'DonutValue'
From Admin.Companies
Inner Join JobCosting.PurchaseOrders
On Admin.Companies.CompanyId = JobCosting.PurchaseOrders.SupplierCompanyId
Inner Join JobCosting.PurchaseOrderItems
On JobCosting.PurchaseOrders.PurchaseOrderId =JobCosting.PurchaseOrderItems.PurchaseOrderId
Where UniqueName Like 'HH %' Group By UniqueName Order By 'DonutValue' Desc
)
SELECT *
FROM (SELECT CompanyId, UniqueName,CurrencyCode,ExchangeRate,FromCurrencyID,
ToCurrencyId, ActiveDate,
rank() OVER
(partition BY UniqueName,Admin.Currencies.CurrencyId
ORDER BY ActiveDate DESC) AS Rank
FROM Admin.Companies
INNER JOIN Admin.Currencies
ON Admin.Companies.CurrencyId = Admin.Currencies.CurrencyId
INNER JOIN Admin.CurrencyRates
ON Admin.Currencies.CurrencyId = Admin.CurrencyRates.FromCurrencyId
WHERE Admin.CurrencyRates.ToCurrencyId = 47) as ci
INNER JOIN cte
on cte.UN = ci.UniqueName
where ci.Rank = 1;
此解决方案使用公共表表达式。但是,通过创建视图并将视图加入排名查询,您也可以获得相同的结果。非常感谢,这正好满足了我的需要。在您的帮助下,挑战已经扩大,我再次陷入困境。任何帮助都将受到感激。