Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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
Sql 返回列具有最小值的行_Sql_Sql Server_Reporting Services_Ssrs 2008 - Fatal编程技术网

Sql 返回列具有最小值的行

Sql 返回列具有最小值的行,sql,sql-server,reporting-services,ssrs-2008,Sql,Sql Server,Reporting Services,Ssrs 2008,我有一个设想 Key Name Amt 101 Nikh 100 101 Mark 150 101 Jess 75 102 Sam 200 102 Lee 150 请注意,多个记录的键是相同的。此外,它来自与Name和Amt不同的表。我想返回具有最低金额的记录。以下是示例: Key Name Amt 101 Jess 75 102 Lee 150 到目前为止,我已经运行了一个返回Key和Amt记录的代码,如何添加Name列并确保它返回与minAmt关联的名称 Pl注:我正在

我有一个设想

Key Name Amt
101 Nikh 100
101 Mark 150
101 Jess 75
102 Sam  200
102 Lee  150
请注意,多个记录的键是相同的。此外,它来自与Name和Amt不同的表。我想返回具有最低金额的记录。以下是示例:

Key  Name  Amt
101  Jess  75
102  Lee   150
到目前为止,我已经运行了一个返回Key和Amt记录的代码,如何添加Name列并确保它返回与minAmt关联的名称 Pl注:我正在研究SSRS 2008

为了更好地理解,我将代码粘贴到此处:

SELECT       A.AppID,A.AppDetailID, MIN(B.Amt) AS LOWAmt
FROM         AppDetail AS A 
LEFT OUTER JOIN
(SELECT        TOP (100) PERCENT C.AppID, C.PartyID, MIN(C.TotalScore) AS Amt, D.Name, D.Indicator, E.FirstName, E.LastName
     FROM       DetailGuarantor AS D RIGHT OUTER JOIN
     Applicant AS E ON D.BeginDate = E.BeginDate AND 
     D.PartyID = E.PartyID AND 
     D.AppID = E.AppID RIGHT OUTER JOIN
     ApplicationScore AS C ON 
     E.AppID = C.AppID AND 
     E.PartyID = C.PartyID
     GROUP BY C.AppID, C.PartyID, D.Name, D.Indicator, E.FirstName, E.LastName, 
     ORDER BY C.AppID, Amt) AS B ON A.AppID = B.AppID 

GROUP BY A.AppID,A.AppDetailID

您应该使用行号来实现此目的:


您应该使用行号来实现此目的:


经典问答

;WITH CTE as
(
  SELECT row_number() over (partition by  [Key] order by Amt) rn, 
    [Key],
    Name,
    Amt
  FROM <table>
)
SELECT [Key], Name, Amt
FROM CTE
WHERE rn = 1

编辑:如果在平局的情况下,您希望以最低金额显示所有结果,请将行编号替换为秩

经典问答

;WITH CTE as
(
  SELECT row_number() over (partition by  [Key] order by Amt) rn, 
    [Key],
    Name,
    Amt
  FROM <table>
)
SELECT [Key], Name, Amt
FROM CTE
WHERE rn = 1

编辑:如果在平局的情况下,您希望以最低金额显示所有结果,请将行编号替换为秩

如果您只需要一个简单的查询,那么以下是一种方法:

SELECT       Tab.KeyID, Tab.Name, Tab.Amt
FROM         Tab
INNER JOIN  (SELECT     MIN(Amt) as 'minAmt', [KeyID]
             FROM       Tab
             GROUP BY   [KeyID]) lowestAmt

ON           Tab.KeyID = lowestAmt.KeyID

WHERE        Tab.Amt = lowestAmt.minAmt
GROUP BY     Tab.KeyID, Tab.Name, Tab.Amt
ORDER BY     Tab.KeyID
你可以在这里看到->


希望这有帮助

如果您只需要一个简单的查询,那么以下是一种方法:

SELECT       Tab.KeyID, Tab.Name, Tab.Amt
FROM         Tab
INNER JOIN  (SELECT     MIN(Amt) as 'minAmt', [KeyID]
             FROM       Tab
             GROUP BY   [KeyID]) lowestAmt

ON           Tab.KeyID = lowestAmt.KeyID

WHERE        Tab.Amt = lowestAmt.minAmt
GROUP BY     Tab.KeyID, Tab.Name, Tab.Amt
ORDER BY     Tab.KeyID
你可以在这里看到->



希望这有帮助

与类似,不同的是,您要查找的是最小值而不是最大值。您的意思是表A、B、C、D、E是视图表,然后是因为误解了您的问题。不,这不是一个类似于的视图,不同的是,您要查找的是最小值而不是最大值。您的意思是表a、B、C、D、E是视图表,然后是因为误解了您的问题。不,这不是一个视图我不认为这与OP想要的输出类似?Jerry-你应该阅读/了解排名函数。他们会让你的生活更轻松。你会感谢我的later@t-克劳森:我意识到我犯了一个错误。谢谢我已经相应地编辑了我的答案。@t-clausen.dk您现在看到这有什么问题吗?您正在强制使用“带领带”,您的脚本不容易阅读。你的表现不会达到最佳状态,我不认为这与OP想要的输出类似?Jerry-你应该阅读/了解排名函数。他们会让你的生活更轻松。你会感谢我的later@t-克劳森:我意识到我犯了一个错误。谢谢我已经相应地编辑了我的答案。@t-clausen.dk您现在看到这有什么问题吗?您正在强制使用“带领带”,您的脚本不容易阅读。您的性能不会达到最佳状态我有一个非常复杂的代码,其中这只是其中的一小部分。键列表是主表,其中至少有10个表使用左外部联接子查询联接。名称和金额是另一个表。即使在这种情况下,amt也不是一个直接的列。在这种情况下,如何合并此代码。它似乎非常有用。@Anon:你能详细说明一下“领带”是什么意思吗?如果你的数据也有102 Fred 150,你想要的输出是什么?肯定不会有相同amt的名称。我有一个非常复杂的代码,这只是其中的一小部分。键列表是主表,其中至少有10个表使用左外部联接子查询联接。名称和金额是另一个表。即使在这种情况下,amt也不是一个直接的列。在这种情况下,如何合并此代码。这似乎很有用。@Anon:你能详细说明一下“领带”是什么意思吗?如果你的数据也有102 Fred 150,你想要的输出是什么?肯定不会有相同金额的名称