2016-02-14 73 views
0

我有法院審批統計數據,但是我的月度數據存在一些小問題..它沒有按照順序排列,並希望有人能幫助我解決這個問題..有可能在我的表中添加總數?TSQL按月組排列月度報告

DECLARE @StartDate As date = '03-28-2015', 
@EndDate As date = '03-28-2015' 



DECLARE @TEMP_DATES AS TABLE (FROM_DATE DATE, TO_DATE DATE) 
INSERT INTO @TEMP_DATES VALUES(@StartDate, @EndDate) 

DECLARE @TENP_MONTH_YEAR AS TABLE(MONTH_YEAR VARCHAR(20), [YEAR] INT, [MONTH] INT) 
INSERT INTO @TENP_MONTH_YEAR 
select FORMAT(D.Dates, 'MMMM-yy', 'en-US') AS MonthYear, YEAR(D.Dates), MONTH(D.Dates) 
from @TEMP_DATES as T 
    inner join master..spt_values as N 
    on N.number between 0 and datediff(DAY, T.FROM_DATE, T.TO_DATE) 
    cross apply (select dateadd(DAY, N.number, T.FROM_DATE)) as D(Dates) 
where N.type ='P' 
GROUP BY FORMAT(D.Dates, 'MMMM-yy', 'en-US'), YEAR(D.Dates), MONTH(D.Dates) 
ORDER BY YEAR(D.Dates), MONTH(D.Dates) 

DECLARE @NEWID AS UNIQUEIDENTIFIER = NEWID() 

SELECT CT.RPT_CASE_CODE_GROUP, SUM(ISNULL(INCOMING_CASES, 0)) AS INCOMING_CASES, SUM(ISNULL(OUTGOING_CASES, 0)) AS OUTGOING_CASES, 
ISNULL(CAST(SUM(NULLIF(CAST(ISNULL(OUTGOING_CASES, 0) AS DECIMAL),0.00))/SUM(NULLIF(CAST(ISNULL(INCOMING_CASES, 0) AS DECIMAL),0.00)) * 100 AS DECIMAL(18,2)),0) AS [CLEARANCE_RATE], 
MONTH_YEAR 
FROM @tempClearanceListCases tempCLC 
RIGHT OUTER JOIN (SELECT CASE_TYPE_ID, MONTH_YEAR, [YEAR], [MONTH] 
    FROM (SELECT DISTINCT CASE_TYPE_ID FROM @tempClearanceListCases tempCLC) A, @TENP_MONTH_YEAR tempMonthYear) B 
    ON B.CASE_TYPE_ID = tempCLC.CASE_TYPE_ID AND tempCLC.MONTHLY = B.MONTH_YEAR 
INNER JOIN CaseType CT WITH (NOLOCK) 
    ON B.CASE_TYPE_ID = CT.CASE_TYPE_ID 
WHERE ISNULL(COURT_LOCATION_ID, @NEWID) = ISNULL(@COURT_LOCATION_ID, ISNULL(COURT_LOCATION_ID, @NEWID)) 
GROUP BY CT.RPT_CASE_CODE_GROUP, [INTERVAL_MONTH], MONTH_YEAR 
ORDER BY CT.RPT_CASE_CODE_GROUP 

其結果是每月不正確的順序:

RPT_CASE_CODE_GROUP | INCOMEING CASES | OUTGOING CASES | CLEARANCERATE | MONTHYEAR 

BCY/CP     15    4     26.67   March-15 
BCY/CP     15    0     0.00   February-15 
BCY/CP     33    0     0.00   January-15 
BCY/DP      0    0     0.00   February-15 
BCY/DP      2    0     0.00   March-15 
BCY/DP      1    0     0.00   January-15 

結果至少我希望它是:

RPT_CASE_CODE_GROUP | INCOMEING CASES | OUTGOING CASES | CLEARANCERATE | MONTHYEAR 
BCY/CP     33    0     0.00   January-15 
BCY/CP     15    0     0.00   February-15 
BCY/CP     15    4     26.67   March-15 
BCY/DP      1    0     0.00   January-15 
BCY/DP      0    0     0.00   February-15 
BCY/DP      2    0     0.00   March-15 

結果我想:

RPT_CASE_CODE_GROUP | INCOMEING CASES | OUTGOING CASES | CLEARANCERATE | MONTHYEAR 
BCY/CP     33    0     0.00   January-15 
BCY/CP     15    0     0.00   February-15 
BCY/CP     15    4     26.67   March-15 
          63    4     6.34   Overall 
BCY/DP      1    0     0.00   January-15 
BCY/DP      0    0     0.00   February-15 
BCY/DP      2    0     0.00   March-15 
          3    0     0.00   Overall 

我必須堅持我的查詢或cr eate分組查詢?我已經花了很多時間在這個,我很難回頭,即時新鮮的畢業生:(可以任何大師指導我?

+0

我想你的問題是,你不能準確使用'MONTHYEAR'令,因爲它是文本。它是否正確? – Nicarus

+0

它不是文字,它的日期名稱,我可以按MONTHYEAR命令,但它會弄亂我的案例代碼組.. .. @Nicarus – JohhnyNewbie

+0

爲什麼?先按'RPT_CASE_CODE_GROUP'排序,然後'MONTHYEAR' – Nicarus

回答

1

如果所有MONTHYEAR跟隨薩姆斯圖案MONTHNAME-XX,你可以使用下面的語句順序:

ORDER BY 
    cast('20' + substring(MONTHYEAR, Charindex('-', MONTHYEAR) + 1, 2) + '-' + substring(MONTHYEAR, 1, 3) + '-01' AS date) 
+0

不可能,有時一年將是-12或-14 .. – JohhnyNewbie

+0

是2016年需要硬編碼嗎? – JohhnyNewbie

+0

@JohhnyNewbie,我改變了陳述。只要讓我知道這是否適合你。謝謝 – FLICKER

0

這看起來像UNION條款的工作,看起來你應該有這個執行命令你想要的結果:

SELECT -- data you want from tables w/ all joins 
WHERE RPT_CASE_CODE_GROUP = 'BCY/CP' 
UNION ALL 
SELECT '', SUM([INCOMING CASES]), SUM([OUTGOING CASES]), AVG([CLEARANCE RATE], 'Overall' 
FROM -- source data 
WHERE RPT_CASE_CODE_GROUP = 'BCY/CP' 
UNION ALL 
SELECT -- data you want from tables w/ all joins 
WHERE RPT_CASE_CODE_GROUP = 'BCY/DP' 
UNION ALL 
SELECT '', SUM([INCOMING CASES]), SUM([OUTGOING CASES]), AVG([CLEARANCE RATE], 'Overall' 
FROM -- source data 
WHERE RPT_CASE_CODE_GROUP = 'BCY/CP' 

另外,如果有比呈現一個更RPT_CASE_CODE_GROUP值,你可以使用一個循環來獲取有關個個像這樣的信息:

CREATE TABLE #rccg(ID INT IDENTITY(1,1), RPT_CASE_CODE_GROUP NVARCHAR(15)) 
INSERT INTO #rccg(RPT_CASE_CODE_GROUP) 
SELECT DISTINCT RPT_CASE_CODE_GROUP FROM --data source 

DECLARE @i INT = 1, @j INT = (SELECT MAX(ID) FROM #rccg), @rccg NVARCHAR(15) 
DECLARE @results TABLE(rccg NVARCHAR(15), ic INT, oc INT, cr INT, my NVARCHAR(20)) 
WHILE @i < @j 
BEGIN 
    SET @rccg = (SELECT RPT_CASE_CODE_GROUP FROM #rccg WHERE ID = @i) 
    INSERT INTO @results 
    SELECT -- data you want from tables w/ all joins 
    WHERE RPT_CASE_CODE_GROUP = @rccg 
    UNION ALL 
    SELECT '', SUM([INCOMING CASES]), SUM([OUTGOING CASES]), AVG([CLEARANCE RATE], 'Overall' 
    FROM -- source data 
    WHERE RPT_CASE_CODE_GROUP = @rccg 
END 
SELECT * FROM @rccg 
DROP TABLE #rccg 

我知道我沒有使用你的特定鱈魚e,因爲這會佔用大量的空間,但我認爲你會得到大致的想法。對於每個字段,您希望該時間段的總數,則使用集合函數SUM(column_name)。你可以在這裏得到一個很好的解釋和例子:http://www.techonthenet.com/sql/sum.php

我希望這至少可以幫助您指出正確的方向。

+0

好吧我會嘗試使用這個,但我害怕這個月..任何地方我可以聯繫你可能嗎? – JohhnyNewbie

+0

@JohhnyNewbie我在這裏工作的最周幾和週六。 – CSS

+0

這也是正確的答案總..呃我不能標記2答案 – JohhnyNewbie