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),
(2, '05:00', '7:00', 1),
(3, '05:01', '8:00', 1),
(4, '05:00', '8:00', 1),
(5, '05:00', '6:00', 2),
(6, '05:00', '7:00', 2)
that selects IDs of all records of the same type, with the same dtIn date, ordered by stOut in ascending order:
SELECT DISTINCT tbl.id FROM tbl
LEFT JOIN tbl AS t1
ON tbl.type = t1.type AND
tbl.dtIn = t1.dtIn
ORDER BY tbl.dtOut ASC
But it gives me an error:
ORDER BY items must appear in the select list if SELECT DISTINCT is specified
I tried putting that ORDER BY in different places and it all doesn't seem to work. What am I doing wrong here?
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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With