显示所有行的SQL最小值

显示所有行的SQL最小值,sql,sql-server,Sql,Sql Server,我有一个查询,从下面列出的临时表中选择数据 SELECT Ref, YOA, Account, Cert, MIN(Unit) AS Unit, Name Currency, Amount FROM #TMP_Accounts GROUP BY Ref, YOA, Account, Cert,

我有一个查询,从下面列出的临时表中选择数据

SELECT  Ref,
        YOA,
        Account,
        Cert,
        MIN(Unit) AS Unit,
        Name
        Currency,
        Amount

FROM #TMP_Accounts

GROUP BY    Ref,
            YOA,
            Account,
            Cert,
            Name,
            Currency,
            Amount
运行此查询时,我得到以下结果:

Ref     YOA     Account Cert     Unit Name Currency Amount
1924403 2017    ABCXYZ  PFA96417    1   US  CAD  25,167,555
1924403 2017    ABCXYZ  PFA96417    3   FR  CAD  25,167,555.56
1924403 2017    ABCXYZ  PFA96417    4   DE  CAD  25,167,555.56
我一直坚持的一个事实是,当我使用MIN函数时,我想为单位值1拉回一条记录,但却得到了3条记录。我已经一列一列地浏览了这一列,并且只有在我添加金额列时,才会出现额外的记录

当我做一个简单的select*from时,我得到以下结果:

Ref     YOA     Account Cert     Unit Name Currency  Amount
1924403 2017    ABCXYZ  PFA96417    1   US   CAD     25,167,555.00
1924403 2017    ABCXYZ  PFA96417    2   UK   CAD     25,167,555.00
1924403 2017    ABCXYZ  PFA96417    3   FR   CAD     25,167,555.56
1924403 2017    ABCXYZ  PFA96417    4   DE   CAD     25,167,555.56
1924403 2017    ABCXYZ  PFA96417    5   AU   CAD     25,167,555.56
1924403 2017    ABCXYZ  PFA96417    6   NZ   CAD     25,167,555.56
所以我知道它被聚合到一个点,而不是我需要的最小单位值


提前感谢

如果您希望使用最小单位数的行,您可以使用:

select top (1) a.*
from #TMP_Accounts a
order by units;

分组方式
肯定是导致您出现问题的原因。它可能不适合您要执行的操作。

如果您希望该行具有最小单位数,可以使用:

select top (1) a.*
from #TMP_Accounts a
order by units;

分组方式
肯定是导致您出现问题的原因。这可能不适合你想做的事情。

根据你的解释,我认为你在寻找这个:

SELECT *
FROM #TMP_Accounts
WHERE Unit = (SELECT MIN(Unit) FROM #TMP_Accounts)

这不一定返回一行,因为对于具有相同最小值的重复行,您将返回这两行。然而,你的问题并不清楚该如何处理这种情况。

根据你的解释,我认为你在寻找:

SELECT *
FROM #TMP_Accounts
WHERE Unit = (SELECT MIN(Unit) FROM #TMP_Accounts)

这不一定返回一行,因为对于具有相同最小值的重复行,您将返回这两行。但是,您的问题并不清楚该如何处理这种情况。

另一种方法是自行加入表

select a.* from #TMP_Accounts a
inner join (select min(unit) as minunit from #TMP_Accounts) b
on a.Unit = b.minunit

另一种方法是自己连接表

select a.* from #TMP_Accounts a
inner join (select min(unit) as minunit from #TMP_Accounts) b
on a.Unit = b.minunit

格式化提示:编辑时,键入适当的列。标记文本并单击
{}
。我认为您的分组问题是,按货币分组会迫使它返回三条记录。如果有多个Unit 1,您希望看到多少条记录?格式提示:编辑时,请键入正确的列。标记文本并单击
{}
。我认为按货币分组的分组中的问题是迫使它返回三条记录。如果有多个Unit 1,您希望看到多少记录?我更喜欢此版本,因为对于希望罕见的情况,即您的表是一个堆,这将执行得更好/最好(目前为止的答案中)我更喜欢这个版本,因为对于希望罕见的情况,即您的表是一个堆,它的性能会更好/最好(目前为止的答案中)。