2016-11-24 52 views
2

我創建一個查詢返回一個數字:年初至今如下:多個嵌套的SELECT

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 SELECT COUNT(Items.ItemID)作爲thisM onth

它似乎是語法錯誤。任何想法如何做到這一點?

+1

您正在使用哪些DBMS? –

+0

不要在列上使用函數來過濾行。使用年份(...)將刪除訪問該卷的索引(在大多數dbs中)的能力..您使用的是什麼數據庫?,其重要的是要知道這 –

回答

0

最有可能的是,你會得到聚合錯誤。添加thisMonthGroup 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

請提供你的錯誤。 – 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子句。