首页 > 解决方案 > 在 SQL 中连接多个表 - 最佳实践

问题描述

我有 3 张桌子。

表 1:合同主

ContractNo      SDValue Value   CityId     AreaCode
C0001           840888  18482   CY00004    AR0001
C0002           133500  35000   CY00004    AR0001
C0003           NULL    4200    CY00004    AR0001
C0004           73440   7400    CY00004    AR0001
C0005           73440   7400    CY00005    AR0002

表2:合约详情

ContractNo  Code    TxPr Amt
C0001       1       25   2102220.50
C0001       2       25   2102220.50
C0001       3       25   2102220.50
C0002       1       25   333750.00
C0002       2       25   333750.00
C0003       1       25   333750.00
C0003       2       25   333750.00

表3:城市

CityID  CName
CY00004 AMR
CY00005 EEE
CY00006 TRE
CY00008 WSE

表4:面积

AreaCode AName
AR0001   COK
AR0002   TCR
AR0003   EKM
AR0004   RTT

我的预期结果是

 ContractNo     SDValue  Value  CityId     AreaCode   Amt  CName  AName

我写的脚本

select  A.*,B.Amt,C.CName,D.AName 
from ContractMain A  INNER JOIN ContractDetails B on  A.ContractNo=B.ContractNo 
Inner join City C on C.CityId=A.CityId
Inner join Area D on D.AreaCode=A.AreaCode

在这里,我得到了针对 ContractNo 的重复值,因为在表 B 中,我们为列 Code 获得了不同的值

我需要为 ContractNo 获取不同的值。这是实现这一目标的最佳方法

标签: sqlsql-serverjoininner-join

解决方案


select  A.*,SUM(B.Amt) TotalAmt,C.CName,D.AName 
from ContractMain A  INNER JOIN ContractDetails B on  A.ContractNo=B.ContractNo 
Inner join City C on C.CityId=A.CityId
Inner join Area D on D.AreaCode=A.AreaCode
GORUP BY A.*, C.Name, D.AName

分组将删除重复,并将为您提供所需字段的总和


推荐阅读