【问题标题】:Select TOP 2 with DISTINCT name SQL SERVER选择具有 DISTINCT 名称 SQL SERVER 的 TOP 2
【发布时间】:2014-08-15 09:48:25
【问题描述】:

我需要获得花费更多但不重复的前 2 名客户。

我有这个代码:

Select DISTINCT Top 2 Clientes.Nome, Clientes.NCartao, Vendas.ValorCIva 
from Clientes AS Cli, Vendas
INNER JOIN Clientes ON Clientes.IdCliente = Vendas.IdCliente
order by Vendas.ValorCIva DESC

我有这个结果:

Client          Number  Total
José Pinto      123456  8,48
José Pinto      123456  6,52
Joao Ferreira   564789  5,75

但我想要这个:

Client          Number  Total
José Pinto      123456   15
Joao Ferreira   564789  5,75

【问题讨论】:

  • 这与您的问题并不完全相关,但您的原始查询中似乎有一个不必要/未引用的交叉连接表:Clientes AS Cli,

标签: sql sql-server select distinct distinct-values


【解决方案1】:

一种方法:

select Top 2 Clientes.Nome, Clientes.NCartao, sum(Vendas.ValorCIva) ValorCIva 
from Clientes AS Cli, Vendas INNER JOIN Clientes ON Clientes.IdCliente = Vendas.IdCliente 
group by Clientes.Nome, Clientes.NCartao
order by sum(Vendas.ValorCIva) DESC

【讨论】:

  • 我想如果你仔细观察,你会发现 OP 是SUMing 总数。
  • 非常感谢,您对我的问题帮助很大
【解决方案2】:

如果您不想重复该客户端,请放置一个 GROUP BY,以便它会自动显示每个客户端并且不重复自身,就像这样..

Select Top 2 Clientes.Nome, Clientes.NCartao, Vendas.ValorCIva 
FROM Clientes AS Cli, Vendas
INNER JOIN Clientes ON Clientes.IdCliente = Vendas.IdCliente
GROUP BY Clientes.Nome
ORDER BY Clientes.Nome

【讨论】:

  • 这将失败,因为 Clientes.NCartaoVendas.ValorCIva 不在 group by 中,它也没有解决 OP 正在谈论的添加。马甘当乌马加。 :)
  • 哦,我明白了,我只是复制了您的查询,然后按以下方式分组:) 哈哈抱歉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多