2016-02-14 74 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