2016-05-11 2 views
0
SELECT Count(*) AS MonthTotal 
FROM CRMProjects 
WHERE CreatedDate between '01 May 2016' and '31 May 2016' 

SELECT Count(*) AS YearTotal 
FROM CRMProjects 
WHERE CreatedDate between '01 Jan 2016' and '31 Dec 2016' 

SELECT Count(*) AS MonthNew 
FROM CRMProjects 
WHERE CreatedDate between '01 May 2016' and '31 May 2016' 
AND SystemType = 'O' 

SELECT Count(*) AS YearClosed 
FROM CRMProjects 
WHERE CreatedDate between '01 Jan 2016' and '31 Dec 2016' 
AND SystemType = 'C' 

Он заполняет только месяц в таблице, он не заполняет другие разделы, поскольку Visual Studio не разрешает несколько операторов выбора для одного набора данных.Могу ли я сделать один оператор select в SQL?

ответ

0

Я хотел бы предложить что-то вроде этого:

SELECT 'Month Total' AS Label, Count(*) AS Value 
FROM CRMProjects 
WHERE CreatedDate between '01 May 2016' and '31 May 2016' 

UNION ALL 

SELECT 'Year Total' AS Label, Count(*) AS Value 
FROM CRMProjects 
WHERE CreatedDate between '01 Jan 2016' and '31 Dec 2016' 

UNION ALL 

SELECT 'Month New' AS Label, Count(*) AS Value 
FROM CRMProjects 
WHERE CreatedDate between '01 May 2016' and '31 May 2016' 
AND SystemType = 'O' 

UNION ALL 

SELECT 'Year Closed' AS Label, Count(*) AS Value 
FROM CRMProjects 
WHERE CreatedDate between '01 Jan 2016' and '31 Dec 2016' 
AND SystemType = 'C' 
0

Вы можете использовать SUM(CASE) как своего рода SUMIF для этого ...

SELECT 
    SUM(CASE WHEN CreatedDate between '01 May 2016' and '31 May 2016' THEN 1 END) AS MonthTotal, 
    SUM(1) AS YearTotal, 
    SUM(CASE WHEN CreatedDate between '01 May 2016' and '31 May 2016' AND SystemType = 'O' THEN 1 END) AS MonthNew, 
    SUM(CASE WHEN SystemType = 'C' THEN 1 END) AS YearClosed 
FROM 
    CRMProjects 
WHERE 
    CreatedDate between '01 Jan 2016' and '31 Dec 2016' 

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

0

Выберите каждый счетчик в качестве столбца своей собственной:

Select 
    (SELECT Count(*) 
     FROM CRMProjects 
     WHERE CreatedDate between '01 May 2016' and '31 May 2016') AS MonthTotal, 


    (SELECT Count(*) 
     FROM CRMProjects 
     WHERE CreatedDate between '01 Jan 2016' and '31 Dec 2016') AS YearTotal, 


    (SELECT Count(*) 
     FROM CRMProjects 
     WHERE CreatedDate between '01 May 2016' and '31 May 2016' 
     AND SystemType = 'O') AS MonthNew, 


    (SELECT Count(*) 
     FROM CRMProjects 
     WHERE CreatedDate between '01 Jan 2016' and '31 Dec 2016' 
     AND SystemType = 'C') AS YearClosed 
Смежные вопросы