我还是SQL新手,我的问题有点长。好的,这是......我的任务是计算位于特定位置的机器的总停机时间。每台机器都有父母,子女和孙子女。例如:
Location:A1
Machine no:A1-100, A1-100-01, A1-100-01-001, A1-200, A1-200-01
(A1-100-01, A1-100-01-001 belongs to A1-100) and (A1-200-01 belongs to A1-200)
这是我的SQL查询:
select machine_no, downtime from table_name where location='A1'
输出结果为:
machine_no downtime
A1-100-01 2
A1-100 1.5
A1-200 3
A1-100-01-001 0.5
A2-200-01 1.5
我的问题是如何将子孙分组给父母并显示该群体的总停机时间?如果问题令人困惑,我很抱歉,但基本上我希望输出是这样的:
machine_no total_downtime
A1-100 4 (total of A1-100,A1-100-01,A1-100-01-001)
A1-200 4.5 (total of A1-200,A1-200-01)
谢谢。
答案 0 :(得分:0)
您可以将group by
与sum
一起使用,如:
select machine_no, sum(downtime) from table_name where location like 'A1-100%' group by machine_no;
答案 1 :(得分:0)
尝试以下查询:
SELECT machine_no, SUM(downtime) as total_downtime
FROM (
SELECT
SUBSTR(machine_no, 1,
CASE WHEN INSTR(machine_no, '-', 1, 2) = 0 THEN LENGTH(machine_no) ELSE INSTR(machine_no, '-', 1, 2)-1 END
) as machine_no, -- this will get the part of machine_no before the second '-' char
downtime
FROM MyTable
WHERE location='A1'
) InnerQuery
GROUP BY machine_no
输出:
machine_no total_downtime
A1-100 4
A1-200 4.5
您实际上并不需要内部查询,但它比SUBSTR(....)表达式分组更具可读性。