SELECT DISTINCT with LEFT JOIN, ORDERed BY in t-SQL

前端 未结 5 2043
悲哀的现实
悲哀的现实 2021-02-14 05:08

I have the following table in SQL Server 2008:

CREATE TABLE tbl (ID INT, dtIn DATETIME2, dtOut DATETIME2, Type INT)

INSERT tbl VALUES
(1, \'05:00\', \'6:00\', 1         


        
5条回答
  •  别跟我提以往
    2021-02-14 05:46

    It doesn't make sense to ORDER by a column that is not included in the list of DISTINCT items.

    Let's use a simple scenario. First, a table FruitPerson:

    Fruit  PersonName
    -----  ------
    Apple  Joe
    Apple  Mary
    Peach  Karen
    Peach  Lance
    

    Here's the query equivalent to what you're trying to do:

    SELECT DISTINCT Fruit
    FROM FruitPerson
    ORDER BY PersonName;
    

    The result of this query without the ORDER BY is this:

    Fruit
    -----
    Apple
    Peach
    

    But now, the question is: how should the engine order these two values "Apple" and "Peach" by PersonName? Which PersonNames? There are two people per fruit! Which name(s), exactly, should it use to decide whether Apple or Peach comes first?

    Instead, rewrite your query as an aggregate:

    SELECT Fruit, MinName = Min(PersonName) -- which name to order on
    FROM FruitPerson
    GROUP BY Fruit -- here's how you get your distinctness
    ORDER BY MinName;
    

提交回复
热议问题