求一个SQL,最好不用反复查询

从不签到 2015-03-31 04:31:12
A表
ItemID ID1, ID2, ID3, ID4, F1,F2,F3
A001 kg kg m kg

B表
ItemID From To Factor
A001 kg kg 1
A001 m kg 2

现在想求得是,a表的ID1->ID4, ID2->ID4, ID3->ID4 之间的转换

结果就是
ItemID ID1, ID2, ID3, ID4, F1,F2,F3
A001 kg kg m kg 1 1 2
...全文
145 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamesrggg 2015-04-01
  • 打赏
  • 举报
回复
引用 3 楼 hao1geren 的回复:
--查询方式
SELECT A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4
    ,T1.Factor F1,T2.Factor F2,T3.Factor F3
FROM A
    LEFT JOIN B T1 ON A.ItemID=T1.ItemID AND A.ID1=T1.[From] AND A.ID4=T1.[To]
    LEFT JOIN B T2 ON A.ItemID=T2.ItemID AND A.ID2=T2.[From] AND A.ID4=T2.[To]
    LEFT JOIN B T3 ON A.ItemID=T3.ItemID AND A.ID3=T3.[From] AND A.ID4=T3.[To]
这种方式的话,对B表是检索一次还是多次呢, 如果B表数据量很大,就会很慢吧
三次,数据量不是超大的情况,应该分辨不出速度的变化
从不签到 2015-04-01
  • 打赏
  • 举报
回复
--查询方式
SELECT A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4
    ,T1.Factor F1,T2.Factor F2,T3.Factor F3
FROM A
    LEFT JOIN B T1 ON A.ItemID=T1.ItemID AND A.ID1=T1.[From] AND A.ID4=T1.[To]
    LEFT JOIN B T2 ON A.ItemID=T2.ItemID AND A.ID2=T2.[From] AND A.ID4=T2.[To]
    LEFT JOIN B T3 ON A.ItemID=T3.ItemID AND A.ID3=T3.[From] AND A.ID4=T3.[To]
这种方式的话,对B表是检索一次还是多次呢, 如果B表数据量很大,就会很慢吧
还在加载中灬 2015-03-31
  • 打赏
  • 举报
回复
--查询方式
SELECT A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4
	,T1.Factor F1,T2.Factor F2,T3.Factor F3
FROM A
	LEFT JOIN B T1 ON A.ItemID=T1.ItemID AND A.ID1=T1.[From] AND A.ID4=T1.[To]
	LEFT JOIN B T2 ON A.ItemID=T2.ItemID AND A.ID2=T2.[From] AND A.ID4=T2.[To]
	LEFT JOIN B T3 ON A.ItemID=T3.ItemID AND A.ID3=T3.[From] AND A.ID4=T3.[To]

--更新方式
UPDATE A
SET F1=T1.Factor,F2=T2.Factor,F3=T3.Factor
FROM A
	LEFT JOIN B T1 ON A.ItemID=T1.ItemID AND A.ID1=T1.[From] AND A.ID4=T1.[To]
	LEFT JOIN B T2 ON A.ItemID=T2.ItemID AND A.ID2=T2.[From] AND A.ID4=T2.[To]
	LEFT JOIN B T3 ON A.ItemID=T3.ItemID AND A.ID3=T3.[From] AND A.ID4=T3.[To]
jamesrggg 2015-03-31
  • 打赏
  • 举报
回复
Declare @TmpDataA Table(
	ItemID NVarchar(100),
	ID1 Nvarchar(5),
	ID2 Nvarchar(5),
	ID3 Nvarchar(5),
	ID4 Nvarchar(5))

Insert Into @TmpDataA
Select 'A001','kg','kg','m','kg'

Declare @TmpDataB Table(
	ItemID NVarchar(100),
	FromS Nvarchar(5),
	ToS NVarchar(5),
	Factor Int)
Insert Into @TmpDataB
Select 'A001','kg','kg',1
Union
Select 'A001','m','kg',2

Select A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4,Sum(F1) As F1,Sum(F2) As F2,Sum(F3) AsF3 From (
Select A.*,B.Factor As F1,0 As F2,0 As F3
	From @TmpDataA A
	Inner Join @TmpDataB B On B.ItemID = A.ItemID And B.FromS = A.ID1 And B.ToS = A.ID4
Union All
Select A.*,0 As F1,B.Factor As F2,0 As F3
	From @TmpDataA A
	Inner Join @TmpDataB B On B.ItemID = A.ItemID And B.FromS = A.ID2 And B.ToS = A.ID4
Union All
Select A.*,0 As F1,0 As F2,B.Factor As F3
	From @TmpDataA A
	Inner Join @TmpDataB B On B.ItemID = A.ItemID And B.FromS = A.ID3 And B.ToS = A.ID4) A
	Group By A.ItemID,A.ID1,A.ID2,A.ID3,A.ID4

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧