我有三个表,即class_record,class_violation,violation。
表class_record包含以下列和数据:
Class Violation CR No. | Class ID
000-000 | A30-000
000-001 | A30-000
表class_violation包含以下列和数据:
Class Violation CR No. | Violation ID
000-000 | 2
000-000 | 1
000-001 | 2
000-001 | 4
000-001 | 3
表违规包含以下列和数据:
Violation ID | First Amount | Second Amount
1 | 1000 | 2000
2 | 200 | 400
3 | 500 | 1000
4 | 500 | 1000
表class_record
包含类记录的信息。
表class_violation
是包含已提交的违规内容的表。最后,表violation
包含有关违规的信息。
如果违规被提交两次,则会触发第二笔金额而不是第一笔金额。正如您在class_violation
列Violation ID
列上看到的那样,数字2违规ID被提交两次。第二笔金额必须是收费金额而不是第一笔金额。因此,如果提交两次,总收费金额将是第一笔金额加上第二笔金额。我的问题是,如何获得第二笔金额而不是第一笔金额,并获得违规的总金额?到目前为止,这是我的SQL查询,但是非常错误:
SELECT SUM(`First Amount`)
FROM violation
WHERE `Violation ID`
IN (SELECT `Violation ID` FROM class_violation
WHERE `Class Violation No.`
IN (SELECT `Class Violation CR No.`
FROM class_record WHERE `Class ID` = 'A30-000'))
请帮帮我。对不起我的英语不好。查询的结果必须是:
SUM
2600
这是我的sqlfiddle链接:http://sqlfiddle.com/#!2/2712a
答案 0 :(得分:1)
请参阅此查询:
SELECT class_record.ClassID,SUM(A.VioAmount),GROUP_CONCAT(A.VioAmount)
FROM class_record
INNER JOIN (SELECT class_record.ClassID, class_record.CR_No, IF(COUNT(violation.ViolationID)=1, SUM(FAmount),(FAmount+SAmount)) AS VioAmount
FROM violation
INNER JOIN class_violation ON violation.ViolationID = class_violation.ViolationID
INNER JOIN class_record ON class_violation.CR_No = class_record.CR_No
WHERE ClassID = 'A30-000'
GROUP BY violation.ViolationID, class_record.ClassID) A ON A.ClassID = class_record.ClassID
AND A.CR_No = class_record.CR_No
GROUP BY class_record.ClassID
您也可以在http://sqlfiddle.com/#!2/0d855b/35
检查SQLFiddle现在我将单独的Select中的值取出,然后将其与另一个取值以获取SUM。希望这能解决你的问题。一切都好。
答案 1 :(得分:0)
如果计数(违规ID)= 2则需要返回列“第二金额”,如果计数(违规ID)= 1,则需要“第一金额”?
如果我理解你的问题,请查找“CASE”操作符。