MS Access Query - игнорирование пункта «Order By» - PullRequest
1 голос
/ 14 апреля 2011
SELECT u.UserLastName, u.UserID, SUM((Format(c.CallLength, 'h') * 60 *60)) as hourSeconds, SUM((Format(c.CallLength, 'n') * 60)) as minSeconds,
                SUM((Format(c.CallLength, 's'))) as seconds, COUNT(*) as 'callCount'
                FROM Calls AS c INNER JOIN User AS u ON c.UserID = u.UserID
                WHERE c.CallDate BETWEEN format(NOW(), 'yyyy-mm-dd 00:00:00') AND format(Now(), 'yyyy-mm-dd 23:59:59') AND u.UserLastName NOT IN ('Britt','Jason','System')
                GROUP BY u.UserID, u.UserLastName
                ORDER BY 'callCount' DESC;

Я потратил целую вечность, пытаясь использовать разные методы для сортировки этого запроса, используя предложение "ORDER BY"Что неверно?Он просто выполняет запрос без ошибок, но вместо этого сортирует его по полю u.UserID.Независимо от того, что я делаю, я не могу получить предложение ORDER BY для заказа любого поля!

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Если ваш исходный запрос возвратил нужные данные без ошибок, и единственной проблемой был ORDER BY, я думаю, что это простое изменение - путь.

SELECT
    u.UserLastName,
    u.UserID,
    SUM((Format(c.CallLength, 'h') * 60 *60)) as hourSeconds,
    SUM((Format(c.CallLength, 'n') * 60)) as minSeconds,
    SUM((Format(c.CallLength, 's'))) as seconds,
    COUNT(*) as callCount
FROM Calls AS c INNER JOIN User AS u ON c.UserID = u.UserID
WHERE
    c.CallDate BETWEEN format(NOW(), 'yyyy-mm-dd 00:00:00')
    AND format(Now(), 'yyyy-mm-dd 23:59:59')
    AND u.UserLastName NOT IN ('Britt','Jason','System')
GROUP BY u.UserID, u.UserLastName
ORDER BY 6 DESC;

Когда вы назначаете псевдоним дляполе (или выражение), вы не можете использовать это псевдоним в ORDER BY.Однако вы можете ссылаться на него по порядковому номеру в списке полей.

1 голос
/ 14 апреля 2011

Вы не хотите использовать строку в качестве имени столбца.

Попробуйте это.

также, если я правильно помню, вы не можете заказать и сгруппировать. так что подгруппы выбирают, и вы можете заказать результаты ...

Select * from (
    SELECT 
        u.UserLastName, 
        u.UserID, 
        SUM((Format(c.CallLength, 'h') * 60 *60)) as hourSeconds, 
        SUM((Format(c.CallLength, 'n') * 60)) as minSeconds,
        SUM(Format(c.CallLength, 's')) as seconds, 
        COUNT(*) as callCount 
    FROM Calls AS c 
    INNER JOIN User AS u ON c.UserID = u.UserID

    WHERE c.CallDate BETWEEN format(NOW(), 'yyyy-mm-dd 00:00:00') AND 
          format(Now(), 'yyyy-mm-dd 23:59:59') AND 
          u.UserLastName NOT IN ('Britt','Jason','System')
    GROUP BY u.UserID, u.UserLastName
)
ORDER BY callCount DESC;

если имя столбца нельзя использовать, потому что оно является ключевым словом или несколькими словами. попробуйте поставить вокруг него квадратные скобки.

[CallCount]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...