SQL Query เพื่อรวมฟิลด์จากตารางต่างๆ

ฉันเป็นโปรแกรมเมอร์ผู้ต่ำต้อยที่เกลียด SQL ... :) โปรดช่วยฉันด้วยคำถามนี้

ฉันมี 4 ตาราง เช่น:

Table A:
Id Total
1  100
2  200
3  500

Table B
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Table C
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Table D
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

ฉันจำเป็นต้องสร้าง SELECT ที่แสดง Id, Total และ SUM ของฟิลด์ Amount ของตาราง B, C และ D เช่นนี้

Id Total AmountB AmountC AmountD
1  100   43      43      43
2  200   55      55      55
3  500   65      65      65

ฉันได้ลองใช้การรวมภายในของทั้งสามตารางด้วย Id และทำผลรวมของฟิลด์จำนวนเงิน แต่ผลลัพธ์ไม่เข้มงวด นี่เป็นคำถามที่ผิด:

SELECT     dbo.A.Id, dbo.A.Total, SUM(dbo.B.Amount) AS Expr1, SUM(dbo.C.Amount) AS  Expr2, SUM(dbo.D.Amount) AS Expr3
FROM         dbo.A INNER JOIN
                  dbo.B ON dbo.A.Id = dbo.B.ExtId INNER JOIN
                  dbo.C ON dbo.A.Id = dbo.C.ExtId INNER JOIN
                  dbo.D ON dbo.A.Id = dbo.D.ExtId
GROUP BY dbo.A.Id, dbo.A.Total

ขอบคุณล่วงหน้า ฉันแค่เกลียด SQL (หรือ SQL เกลียดฉัน)

แก้ไข: ฉันพิมพ์ผิด แบบสอบถามนี้ไม่ได้ให้ผลลัพธ์ที่ถูกต้อง ขยายตัวอย่าง


person Ignacio Soler Garcia    schedule 20.02.2010    source แหล่งที่มา


คำตอบ (5)


หรือคุณสามารถใช้ประโยชน์จากการใช้ SubQueries:

select A.ID, A.Total, b.SB as AmountB, c.SC as AmountC, d.SD as AmountD
from A
  inner join (select ExtID, sum(Amount) as SB from B group by ExtID) b on A.ID = b.ExtID
  inner join (select ExtID, sum(Amount) as SC from C group by ExtID) c on c.ExtID = A.ID
  inner join (select ExtID, sum(Amount) as SD from D group by ExtID) d on d.ExtID = A.ID
person odiseh    schedule 20.02.2010
comment
ฉันชอบแนวทางของคุณมาก สะอาด เรียบง่าย ... และได้ผล! ขอบคุณ .. แต่ฉันยังคงเกลียด SQL : P - person Ignacio Soler Garcia; 20.02.2010

จากคำอธิบายของคุณ ข้อความค้นหานี้ควรให้ข้อผิดพลาดแก่คุณเนื่องจากคุณกำลังใช้คอลัมน์ที่ไม่มีอยู่จริง dbo.A.Amount ในกลุ่มของคุณโดย การเปลี่ยนสิ่งนี้เป็น dbo.A.Total อาจเป็นสิ่งที่คุณต้องการ

หากคุณต้องการจำนวนเงินทั้งหมดรวมกัน ให้ลองใช้คำถามนี้:

select A.Id, A.Total, sum(B.Amount + C.Amount + D.Amount) AS Total_Amount
from A
  inner join B on A.Id = B.ExtId
  inner join C on A.Id = C.ExtId
  inner join D on A.Id = D.ExtId
group by A.Id, A.Total;
person a'r    schedule 20.02.2010
comment
นี่คือคำตอบที่ดีที่สุด เนื่องจากแบบสอบถามนี้ควรทำงานเร็วขึ้นเนื่องจาก SQL Server สามารถเพิ่มประสิทธิภาพได้เนื่องจากไม่มีแบบสอบถามแบบซ้อน - person Mohamed Nagieb; 07.02.2021

อันนี้ก็ใช้ได้ดีเช่นกัน

SELECT (SELECT SUM(Amount) FROM TableA) AS AmountA, (SELECT SUM(Amount) FROM TableB) AS AmountB, (SELECT SUM(Amount) FROM TableC) AS AmountC, (SELECT SUM(Amount) FROM TableD) AS AmountD

person Jahson kyalo    schedule 20.05.2016

นี่อาจช่วยผู้ใช้รายอื่นได้

SELECT Total=(Select Sum(Amount) from table a)+(Select Sum(Amount) from table b)+(Select Sum(Amount) from table c)
person user3127648    schedule 07.01.2016

ลองใช้รหัสนี้ SELECT Total=isnull((Select Sum(Isnull(Amount,0)) from table a),0)+isnull((Select Sum(isnull(Amount,0)) from table b),0)+isnull( (เลือกผลรวม(เป็นโมฆะ(จำนวน,0)) จากตาราง c),0)

person mitul    schedule 27.12.2017