使用 SQL Server 的新手。我有一个查询,它提取了我们对一组客户端进行分析所需的所有信息,但根据系统的设置方式,它目前需要在 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
有没有人对如何更改查询以完成此操作有任何想法?
试试这个:
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', '' )
请记住相应地更改列,因为它可能没有用空格定义,甚至不像我建议的下划线那样。
有效的主题变体(如果您的 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