2015-06-09 4 views
1

я разработал следующий Microsoft Query в ACE.OLEDB:Excel ACE.OLEDB: COUNTIF эквивалент в запросе

SELECT 
    Name, Country 
    (SELECT COUNT(*) 
    FROM Table1 as T1 
    WHERE Name = T.Name 
     AND Country = T.Country 
     AND Description="Work" 
    GROUP BY Name, Country)/COUNT(*) 
FROM 
    Table1 as T 
GROUP BY 
    Name, Country 

Запрос работает нормально, но это длится вечно, чтобы выполнить на более 90K записей в Excel.

Можно ли оптимизировать этот запрос, используя эквивалент COUNTIF?

Я изображение, запрос может быть оптимизирован, если он работал так:

SELECT 
    Name, Country, 
    COUNTIF(CASE WHEN Description="Work" THEN 1 ELSE 0 END)/COUNT(*) 
FROM 
    Table1 as T 
GROUP BY 
    Name, Country 

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

SELECT SUM(CASE WHEN Description="Work" THEN 1 ELSE 0 END) 
FROM (SELECT "Work" as Description) 

, и я получаю ошибку Unrecognized keyword WHEN.

+0

случай, когда, кажется, не работает в MS Query, хотя я знаю, что он работает в T-SQL –

+0

Смотрите мой обновленный пост - я получаю 'Непризнанные ключевое слово WHEN' ошибка –

ответ

1

Граф будет просто считать вещи. Вы должны сделать SUM

SUM(CASE WHEN Description="Work" THEN 1 ELSE 0 END) 

Если он не работает, он суммирует 0, в противном случае 1.

Глядя больше на тегах, вы упоминаете Excel. Вы, возможно, потребуется изменить его

SUM(IIF(Description="Work", 1, 0)) 
+0

Смотрите мой обновленный post - я получаю сообщение «Unrecognized keyword WHEN» –

+0

@ AnalystCave.com, пересмотренный для оператора IF() через Excel, чтобы вы могли попробовать. – DRapp

+0

Я думаю, вы пропустили один «я». Функция 'Iif'. Да, это работает, спасибо, что напомнило мне :) полностью забыл об этом. Сделайте коррекцию, и я пометю как ответ –