【问题标题】:Write Sql script to fetch data in one to many relationship编写Sql脚本以一对多关系获取数据
【发布时间】:2022-06-28 08:27:49
【问题描述】:

我想写一个 sql 脚本从 2 个表中获取数据,一个是父表,第二个是子表

出价

投标 ID |代码 |日期

1 | H | 2022-05-12
2 |乙| 2022-05-13

投标结果

投标结果 ID |出价 |埃米

12 | 1 | 50

13 | 1 | 20

14 | 2 | 30

投标和投标结果

我想从投标表中获取日期、代码、投标 ID 列 和 BidResultId,来自 BidResult 的 EMI,但想要另一列最小 EMI

从上面的例子中我想获取bidId 1

代码 H,日期 2022-05-12,BidResultId 12,Emi 50 和 Min Emi 介于 50 和 20 之间,即 20

所以我写了以下查询

Select B.BidId,BR.EMI As Installment,
(Select Min(BR.EMI ) from BidResult BR
Inner Join Bid B on B.BidId = BR.BidResultId
where B.BidId = 5) As MinInstallment,
B.Code,
BR.BidResultId,
CONVERT(DATE, B.Date) As BidDate
from Bid B
Inner Join BidResult BR On B.BidId = BR.BidId
where B.BidId= 5 and B.TypeId = 1

除了 BidResult 中该 BidId 的最小 EMI 值外,所有字段都是简单明了的

请检查查询并建议是否有任何修改

【问题讨论】:

  • 这有点难以理解。我认为使用派生表而不是“内联”列可能会更好。我会尝试让您开始:选择 B.BidId,BR.EMI 作为分期付款,B.Code,BR.BidResultId,CONVERT(DATE, B.Date) As BidDate from Bid B JOIN (Select Min(BR.EMI)作为 MyMinEmi , BR.BidResultId MyBidResultId 来自 BidResult BR GROUP BY BR.BidResultId) 作为派生1 ON B.BidId = derived1.MyBidResultId 内部加入 BidResult BR 在 B.BidId = BR.BidId 其中 B.BidId= 5 和 B.TypeId = 1

标签: sql sql-server database


【解决方案1】:

解决方案 1:使用分组方式

select BID, min(EMI) EMI
into #temp
from BIDResult
group by BID

select b.Date, b.Code, b.BidId, br.BidResultId, br.EMI 
from BID b
inner join #temp on t.BID = b.BID
inner join BIDResult br on br.BID = t.BID and br.EMI = t.EMI

解决方案 2:不分组

select *, ROW_Number() over(PARTITION by BID order by EMI) RowNumber
into #temp
from BIDResult

select b.Date, b.Code, b.BidId, br.BidResultId, br.EMI  
from BID b
inner join #temp t on t.BID = b.BID and t.RowNumber = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 2013-09-28
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多