在SQL Server中基于作业ID组合行

时间:2016-02-08 23:28:44

标签: sql sql-server

使用SQL Server的SQL新手。我有一个查询,它提取了我们在一组客户端上执行分析所需的所有信息,但根据系统的设置方式,它目前需要在数据变得有用之前手动清理excel。

一些作业ID以S结束,但是当我们进行分析时,我们会将作业ID作为一个整体来看,并且必须花费大量时间在Excel中手动将数据组合在一起。

示例查询结果

JOB ID   LABOR EXPENSE  DIRECT MATERIAL
10067    400395.29      96614.25
10067S   143668         44148.22
10068    545100.79      127143.64
10068S   147009.89      33506.31

我想要做的是在运行查询时将行与Job ID中的S组合成没有的行,我们只为每个作业获取一行数据。

实施例

Job ID  LABOR EXPENSE   DIRECT MATERIAL
10067   544063.29       140762.47
10068   692110.68       160649.95

有没有人对如何改变我的查询以实现这一点有任何想法?

2 个答案:

答案 0 :(得分:3)

试试这个:

select replace( Job_Id, 'S', '' ) as "JOB ID",
       sum (LABOR_EXPENSE) as "LABOR EXPENSE",
       sum (DIRECT_MATERIAL) as "DIRECT MATERIAL"
  from yourTable
group by replace( Job_Id, 'S', '' )
order by replace( Job_Id, 'S', '' ) 

请记住相应地更改列,因为它可能不是用空格定义的,或者甚至是我建议的下划线。

答案 1 :(得分:1)

有效主题的变体(如果您的id值与一致数字长度的数字一致)是使用子字符串:

SELECT SUBSTRING(job_id,1,5) AS job_no, 
SUM(labor_exp) AS tot_lab,
SUM(direct_mat) AS tot_mat
FROM jobs
GROUP BY SUBSTRING(job_id,1,5)

SQLFiddle:http://sqlfiddle.com/#!9/72838/16