我正在尝试获得总分钟,但是我的左连接无法正常工作。有没有办法为给定的MachineDescription添加一个DISTINCT总分钟的列?
这是sqlfiddle:http://sqlfiddle.com/#!2/7fd99/1
SELECT Work.WorkID
, Work.Description
, Machine.MachineDescription
, Name.NAME
, Work2.RegMin
, Work.MINUTES
FROM Work Work
JOIN Machine Machine ON Machine.MachineID = Work.MachineID
LEFT JOIN Work2 Work2 ON Work2.WorkID = Work.WorkID
LEFT JOIN Name Name ON Name.NameID = Work2.NameID
我想要一个包含DISTINCT分钟总和的专栏。因此,WorkID 111的总分钟数将为“30”而不是“40”。
我的输出如下:
WorkID | Description | MachineDescription | Name | RegMin | Minutes
-------------------------------------------------------------------
111 Replace Belt Splitter Joe 10 10
111 Replace Belt Splitter Bob 20 10
112 Door Broke Splitter Joe 10 20
我想要一个DISTINCT WorkID总分钟的列,就像这样...
WorkID | Description | MachineDescription | Name | RegMin | Minutes | Total Minutes
-----------------------------------------------------------------------------------
111 Replace Belt Splitter Joe 10 10 30
111 Replace Belt Splitter Bob 20 10 30
112 Door Broke Splitter Joe 10 20 30
这可能吗?
答案 0 :(得分:1)
使用Correlated Sub-query
获取结果。试试这个。
SELECT Work.WorkID,
Work.Description,
Machine.MachineDescription,
NAME.NAME,
Work2.RegMin,
Work.MINUTES,
(SELECT Sum(DISTINCT MINUTES)
FROM Work w
WHERE w.MachineID = Machine.MachineID) Total_minutes
FROM Work Work
JOIN Machine Machine
ON Machine.MachineID = Work.MachineID
LEFT JOIN Work2 Work2
ON Work2.WorkID = Work.WorkID
LEFT JOIN NAME NAME
ON NAME.NameID = Work2.NameID
输出
WorkID Description MachineDescription NAME RegMin MINUTES Total_minutes
------ ----------- ------------------ ---- ------ ------- -------------
111 Sink Broken SPLITTER Joe 10 10 30
111 Sink Broken SPLITTER Bob 20 10 30
112 Door Broken SPLITTER Joe 10 20 30
答案 1 :(得分:0)
SELECT Work.WorkID
, Work.Description
, Machine.MachineDescription
, Name.NAME
, Work2.RegMin
, Work.MINUTES
, (SELECT (SUM(work2.RegMin) ) FROM work2 left join work on work2.workid = work.workid) - work.minutes AS TotalMinutes
FROM Work Work
JOIN Machine Machine ON Machine.MachineID = Work.MachineID
LEFT JOIN Work2 Work2 ON Work2.WorkID = Work.WorkID
LEFT JOIN Name Name ON Name.NameID = Work2.NameID
GROUP BY work.workID
, Work.Description
, Machine.MachineDescription
, Name.NAME
, Work2.RegMin
, Work.MINUTES
<强>返回强>
WORKID DESCRIPTION MACHINEDESCRIPTION NAME REGMIN MINUTES TOTALMINUTES
111 Sink Broken SPLITTER Bob 20 10 30
111 Sink Broken SPLITTER Joe 10 10 30
112 Door Broken SPLITTER Joe 10 20 20
答案 2 :(得分:0)
将此添加到您的选择中:
(SELECT SUM(minutes)
FROM (SELECT DISTINCT workid, minutes FROM WORK) W
) AS Total_Minutes