SQL 服务器:不同的结果

SQL Server : Distinct results

我有以下SQL服务器查询

SELECT DISTINCT 
    e.idetapa, t.idtramo, m.idmunicipio, m.nombre
FROM 
    terapia h, municipios m, tramos t, rutas r, etapas e 
WHERE 
    r.idruta = 15 
    AND h.consume = 's' 
    AND h.idmunicipio = m.idmunicipio 
    AND r.idruta = t.idruta 
    AND e.idruta = r.idruta 
    AND t.idetapa = e.idetapa 
    AND (m.idmunicipio = t.idmuniini OR m.idmunicipio = t.idmunifin)
ORDER BY 
    e.idetapa, t.idtramo

这是我执行时得到的结果:

idetapa, idtramo, idmunicipio, nombre
2, 6, 19, Poitiers
2, 7, 19, Poitiers
3, 7, 28, Lyon
3, 8, 28, Lyon
7, 4, 53, Bordeaux
8, 1, 53, Bordeaux
12, 6, 37,Paris
13, 1, 37,Paris
.
.
.

我想修改此查询以便为我提供唯一的 idmunicipio 和 idnombre,按 idetapa 和 idtramo 排序,如下结果:

19, Poitiers
28, Lyon
53, Bordeaux
37, Paris

我能做什么?谢谢

排除其他列

SELECT DISTINCT m.idmunicipio, m.nombre
FROM terapia h, municipios m, tramos t, rutas r, etapas e 
WHERE r.idruta=15 AND h.consume='s' AND h.idmunicipio=m.idmunicipio 
AND r.idruta=t.idruta AND e.idruta=r.idruta AND t.idetapa=e.idetapa 
AND (m.idmunicipio=t.idmuniini OR m.idmunicipio=t.idmunifin)

您的请求存在逻辑问题。由于 19, Poitiers 有两个不同的 idetapa 值,idtramo(即 2, 62, 7),SQL 如何知道根据哪对对结果进行排序?在 SELECT 子句中包含列的要求是此要求的自然结果。使用分组和 min/max(或 window 函数)告诉 SQL 哪对更重要,并根据聚合结果进行排序。示例:

SELECT S.idmunicipio, S.nombre
FROM
(
  SELECT
      max(e.idetapa) as idetapa, max(t.idtramo) as idtramo,
      m.idmunicipio, m.nombre
  FROM 
      terapia h, municipios m, tramos t, rutas r, etapas e 
  WHERE 
      r.idruta = 15 
      AND h.consume = 's' 
      AND h.idmunicipio = m.idmunicipio 
      AND r.idruta = t.idruta 
      AND e.idruta = r.idruta 
      AND t.idetapa = e.idetapa 
      AND (m.idmunicipio = t.idmuniini OR m.idmunicipio = t.idmunifin)
  GROUP BY
      m.idmunicipio, m.nombre
) as S
ORDER BY 
    S.idetapa, S.idtramo