下面的代码,对于每个合同(其中ContractTypeID在[1,2,等]中)我想仅返回ContractPurrency ='USD'的合同的MaxPrice - 但是有652个合同(也就是返回的行) WHERE Currency ='USD'但729个合约/行没有货币条款。
我使用MAX()和ROW_NUMBER = 1失败了(以及之前尝试的Cursors和Cross Apply,它们在整个存储过程中都运行了90-120秒)并且我理解ROW_NUMBER = 1策略的问题是当最高价不是美元时,我想要的行(即以美元计的最高价格)将被编号为2 +。
如何返回所有729个结果(但最高价格=美元最高价格)? TIA
SELECT MeasurableID,
EntityID,
MAX (ContractPrice) AS HighPrice
FROM dbo.Contracts
WHERE Contracts.CurrencyCode IN (
('USD'),
('BTC'),
('INR') )
AND dbo.Contracts.MeasurableID IN (
2030,
2017
)
GROUP BY
dbo.Contracts.MeasurableID,
dbo.Contracts.EntityID
ORDER BY
MeasurableID,
EntityId
答案 0 :(得分:1)
您正在寻找条件聚合。这将返回所有729条记录,每条记录的最大美元价格(如果有)。
{
/// <summary>
/// Interaction logic for CaseUserPropertiesWindow.xaml
/// </summary>
public partial class CaseUserPropertiesWindow : PropertiesWindowBase
{
public CaseUserPropertiesWindow()
{
InitializeComponent();
}
}
}
答案 1 :(得分:0)
感谢您的回复,但在创建SQL Fiddle示例时,我意识到如果指定的货币中没有合同,那么当然不会返回任何行(我在测试数据库中播种时出错了曾经以为总有美元)。
条件聚合是有用的,但是对于不同的要求/问题而不是我正在努力。