2016-11-24 2 views
2

Я создаю запрос возвращает один номер: YTD как следует:Несколько вложенных в ВЫБИРАЕТ SQL Query

SELECT TableTemp.YTD  
FROM( 
    SELECT((select COUNT(Items.ItemID) * 100 FROM Items WHERE Items.StatusID in (5,7,11) and year(Items.Close_Date) = 2016)/(select COUNT(Items.ItemID) FROM Items WHERE Items.StatusID in (5,7,11,6) and year(Items.Close_Date) = 2016) )As YTD 
) AS TableTemp                           
GROUP BY TableTemp.YTD ; 

Это работает отлично, но когда я добавить еще одну часть, чтобы вернуть другой номер YTD и thisMonth:

SELECT TableTemp.YTD , TableTemp.thisMonth 
FROM( 

    (select((select COUNT(Items.ItemID) * 100 FROM Items WHERE Items.StatusID in (5,7,11) and year(Items.Close_Date) = 2016)/(select COUNT(Items.ItemID) FROM Items WHERE Items.StatusID in (5,7,11,6) and year(Items.Close_Date) = 2016)) As YTD, 
    (select ((select COUNT(Items.ItemID) * 100 FROM Items WHERE Items.StatusID in (5,7,11) and year(Items.Close_Date) = 2016 and month(Items.Close_Date) = 11)/(select COUNT(Items.ItemID) FROM Items WHERE Items.StatusID in (5,7,11,6) and year(Items.Close_Date) = 2016 and month(Items.Close_Date) = 11)) As thisMonth 
) AS TableTemp                           
GROUP BY TableTemp.YTD 

Даже если я упрощаю это

SELECT TableTemp.YTD , TableTemp.thisMonth 
FROM( 

    select COUNT(Items.ItemID) As YTD 
    , select COUNT(Items.ItemID) As thisMonth 
) AS TableTemp                           
GROUP BY TableTemp.YTD, TableTemp.thisMonth 

Я получаю ошибку синтаксиса NEER выберите COUNT (Items.ItemID) Как thisM onth

кажется, что синтаксис неправильный. Любая идея о том, как это сделать?

+1

Какая СУБД вы используете? –

+0

Не используйте функции столбцов для фильтрации строк. Использование year (...) удаляет возможность доступа к индексу для этой volumn (в большинстве dbs) .. какой db вы используете ?, его важно знать это –

ответ

0

Скорее всего, вы получаете общую ошибку. Добавить thisMonth в Group By

SELECT TableTemp.YTD, TableTemp.thisMonth 
FROM( 
    (select((select COUNT(Items.ItemID) * 100 FROM Items WHERE Items.StatusID in (5,7,11) and year(Items.Close_Date) = 2016)/(select COUNT(Items.ItemID) FROM Items WHERE Items.StatusID in (5,7,11,6) and year(Items.Close_Date) = 2016)) As YTD, 
    (select ((select COUNT(Items.ItemID) * 100 FROM Items WHERE Items.StatusID in (5,7,11) and year(Items.Close_Date) = 2016 and month(Items.Close_Date) = 11)/(select COUNT(Items.ItemID) FROM Items WHERE Items.StatusID in (5,7,11,6) and year(Items.Close_Date) = 2016 and month(Items.Close_Date) = 11)) As thisMonth 
) AS TableTemp                           
GROUP BY TableTemp.YTD, TableTemp.thisMonth 
+0

№, даже если добавить это, это дает мне синтаксическую ошибку – Fati

+0

Please укажите свою ошибку. – Esty

+0

Неправильный синтаксис около 'thisMonth' .. Но я уверен, что это вызвано ошибкой где-то в запросе. – Fati

0

Я думаю, что можно упростить с помощью условной агрегации:

select selected_item_count * 100/all_item_count, thismonth 
FROM (
    SELECT count(case when Items.StatusID in (5,7,11) then 1 end) as selected_item_count, 
     count(case when Items.StatusID in (5,7,11,6) then 1 end) as all_item_count, 
     count(case when Items.StatusID in (5,7,11,6) and month(Items.Close_Date) = 11 then 1 end) As thisMonth 
    FROM items 
    WHERE Items.StatusID in (5,7,11,6) 
    and year(Items.Close_Date) = 2016 
) t 

Я не вижу, почему group by во внешнем запросе необходимо как внутренний запрос будет возвращать только в любом случае.

0

Спасибо всем. Это была проблема с круглыми скобками. Я смог это исправить.

И да, мне действительно не нужна команда group by.

Смежные вопросы