SQL Server使用名称列表定义组

时间:2017-03-23 21:05:45

标签: sql-server group-by

我有一个简单的查询,按部门统计不同类型的故障单。 有5个部门。查询当前按部门分组。

public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
        String line = value.toString();
        String [] parts = line.split("\t");

        int frequency = Integer.parseInt(parts[1]);
        String [] documentDataParts = parts[0].split(",");

        String term = documentDataParts[0];
        String bookFilename = documentDataParts[1];
        String chunk = documentDataParts[2];

        String documentData = bookFilename + "," + chunk + "," + frequency;
        output.collect(new Text(term), new Text(documentData));
}

我需要做的是对票证进行分组,以便Group1只是&#39;应用程序&#39;而Group2是其他部门。

有没有办法按Ages,LesMiserablesbyVictorHugo.txt,5545 1 Aggeus,LeviathanbyThomasHobbes.txt,1268 1 Aggravateth,LeviathanbyThomasHobbes.txt,995 1 Aggravateth,LeviathanbyThomasHobbes.txt,999 1 Aggravation,LeviathanbyThomasHobbes.txt,1015 1 Aggravation,LeviathanbyThomasHobbes.txt,1691 1 Aggregate,LeviathanbyThomasHobbes.txt,1293 1 Agier,LesMiserablesbyVictorHugo.txt,2790 1 Agincourt,LesMiserablesbyVictorHugo.txt,1510 1 Agn,LesMiserablesbyVictorHugo.txt,5114 1 Agnes,LesMiserablesbyVictorHugo.txt,6450 1 Agnese,LesMiserablesbyVictorHugo.txt,580 1 Agnus,UlyssesbyJamesJoyce.txt,1827 1 定义组?

如果可能,就像这样......

SELECT 
    Dept_Name, COUNT(vsrv.TicketNbr) AS TotalTicketsSubmitted, 
    SUM(CASE WHEN vsrv.Closed_Flag = 1 THEN 1 ELSE 0 END) AS TotalTicketsClosed,
    SUM(CASE WHEN vsrv.Closed_Flag = 0 THEN 1 ELSE 0 END) AS TotalOpenTickets          
FROM 
    v_rpt_service vsrv 
LEFT OUTER JOIN 
    v_rpt_SurveysByTicket vsrvy ON vsrv.TicketNbr = Vsrvy.SR_Service_RecID  
WHERE 
    Dept_Name IN ('Application', 'Support', 'Service', 'Development', 'IT')
GROUP BY 
    Dept_Name

2 个答案:

答案 0 :(得分:1)

这样的事可能对你有所帮助。我假设struct Y; struct X { X(Y&){} }; struct Y { Y(X&, int){} }; int main() { X x(Y(x, 6)); } 列来自DEPT_NAME。如果没有将其替换为v_rpt_service

v_rpt_SurveysByTicket

答案 1 :(得分:1)

您可以为此使用分组。这样的事情对你有用。

SELECT CASE WHEN Dept_Name = 'Application' then Dept_Name else 'Group2' end as DepartmentName
    , COUNT(vsrv.TicketNbr) AS TotalTicketsSubmitted
    , SUM(CASE WHEN vsrv.Closed_Flag = 1 THEN 1 ELSE 0 END) AS TotalTicketsClosed
    , SUM(CASE WHEN vsrv.Closed_Flag = 0 THEN 1 ELSE 0 END) AS TotalOpenTickets          
FROM v_rpt_service vsrv LEFT OUTER JOIN v_rpt_SurveysByTicket vsrvy ON vsrv.TicketNbr = Vsrvy.SR_Service_RecID  
WHERE Dept_Name in ('Application', 'Support', 'Service', 'Development', 'IT')
GROUP BY CASE WHEN Dept_Name = 'Application' then Dept_Name else 'Group2' end