這是一個可能的解決方案。這是有限的,因爲它只適用於2012年和2013年,並需要修改,如果你想包括更多的年份。這也不是很優雅,我敢肯定,這個網站上的一些SQL大師將能夠簡化它。
SELECT NVL(SUM(DECODE(date_entered_year, '2012', 1, 0)), 0) year_2012,
NVL(SUM(DECODE(date_entered_year, '2013', 1, 0)), 0) year_2013
FROM (SELECT TO_CHAR(date_entered, 'YYYY-MM') date_entered_month,
TO_CHAR(date_entered, 'YYYY') date_entered_year
FROM cwwebapp_oti.dbo.v_cbi_All_Tickets
WHERE company_name IN ('Company, Inc.', 'Business LLC')
),
(SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2012-01','yyyy-mm'), rownum -1), 'YYYY-MM') year_month,
TO_CHAR(ADD_MONTHS(TO_DATE('2012-01','yyyy-mm'), rownum -1), 'MM') month
FROM cwwebapp_oti.dbo.v_cbi_All_Tickets
WHERE ROWNUM <= MONTHS_BETWEEN(TO_DATE('2013-12','yyyy-mm'),
TO_DATE('2012-01','yyyy-mm'))+1
) list_of_months
WHERE year_month = date_entered_month
GROUP BY month
ORDER BY month
的 list_of_months子查詢只是用來獲取的月表2012年1月和2013年十二月間這可能是任何表,唯一的要求是,它包含了它作爲許多行,因爲你需要幾個月來報告。在這種情況下,我們假設表格至少有24行。
另外我有一個Oracle背景,它看起來像你在SQL Server環境中,所以你需要將Oracle函數轉換爲SQL函數。我希望這有幫助。
UPDATE 我在SQL Server上做了一些Google操作,我認爲下面的查詢應該可以工作。再次,我確信有人更熟悉SQL Server將能夠簡化它。
SELECT SUM(CASE date_entered_year
WHEN '2012' THEN 1
ELSE 0
END) year_2012,
SUM(CASE date_entered_year
WHEN '2013' THEN 1
ELSE 0
END) year_2013
FROM (SELECT CAST(DATEPART(year, DATEADD(mm,rn-1, CONVERT(date, '20120101'))) AS VARCHAR)+'-'+
CAST(DATEPART(month, DATEADD(mm,rn-1, CONVERT(date, '20120101'))) AS VARCHAR) y1,
CAST(DATEPART(month, DATEADD(mm,rn-1, CONVERT(date, '20120101'))) AS VARCHAR) m1
FROM (SELECT row_number() OVER (ORDER BY id) as rn
FROM cwwebapp_oti.dbo.v_cbi_All_Tickets) sub1
WHERE rn <= DATEDIFF(mm, CONVERT(date, '20120101'),
CONVERT(date, '20131231'))+1
) list_of_months LEFT OUTER JOIN
(SELECT CAST(DATEPART(year, date_entered) AS VARCHAR)+'-'+
CAST(DATEPART(month, date_entered) AS VARCHAR) date_entered_month,
CAST(DATEPART(year, date_entered) AS VARCHAR) date_entered_year
FROM cwwebapp_oti.dbo.v_cbi_All_Tickets
WHERE company_name IN ('Company, Inc.', 'Business LLC')
) company_data ON list_of_months.y1 = company_data.date_entered_month
GROUP BY m1
ORDER BY m1
我在MS SQL服務器環境中,準確地說我在Visual Studio 2012中使用查詢生成器來獲取圖表對象的數據。我測試了你的代碼,當然它不會與Oracle功能一起工作,所以它失敗了,但是!我想說謝謝,因爲它爲解決方案奠定了基礎!謝謝! – Coogrrr