我有两个表,如果满足条件,我们想要将值相乘。我看了Multiply 2 values from 2 different tables 无济于事
我想将#Temp1中的所有值与#Temp2中的相应值相乘,其中#Temp1的月份与#Temp2中的月份相同。
我试过
select costs * ratio as Value
from #Temp1, #Temp2
where #Temp2.ratio = cast(SUBSTRING(#Temp1.date,5,2)as int)
无济于事
我想:
costs date ratio
234.33 20170103 23.433
56.65 20170203 11.33
我正在使用SQL Server2012,我们将不胜感激。
Table #Temp1
234.33 20170103
56.65 20170203
Table #Temp2
0.1 1
0.2 2
0.3 3
IF OBJECT_ID ('tempdb..#Temp1') IS NOT NULL
DROP TABLE #Temp1
IF OBJECT_ID ('tempdb..#Temp2') IS NOT NULL
DROP TABLE #Temp2
create table #Temp1
(
costs float,
date Varchar(50)
)
create table #Temp2
(
ratio float,
month int
)
insert into #Temp1
values (234.33, 20170103)
insert into #Temp1
values (56.65, 20170203)
insert into #Temp2
values (.1,01)
insert into #Temp2
values (.2,02)
insert into #Temp2
values (.3,03)
select ratio from #Temp2 where month=3
select cast(SUBSTRING(date,5,2)as int) as month from #Temp1
select * from #Temp1
select * from #Temp2
select costs * ratio as Value
from #Temp1, #Temp2
where #Temp2.ratio = cast(SUBSTRING(#Temp1.date,5,2)as int)
答案 0 :(得分:1)
如果我理解正确,那应该是:
where #Temp2.month = cast(SUBSTRING(#Temp1.date,5,2)as int)
相反:
where #Temp2.ratio = cast(SUBSTRING(#Temp1.date,5,2)as int)
答案 1 :(得分:0)
我是个傻瓜。
这是一个错字:
select *, costs * ratio as Value
from #Temp1, #Temp2
where #Temp2.month = cast(SUBSTRING(#Temp1.date,5,2)as int)
作品
答案 2 :(得分:0)
立即尝试并发表评论。
select month , case when #Temp2.month = cast(SUBSTRING(#Temp1.date,5,2)as int) then costs * ratio else null End as Value
from #Temp1
left join #Temp2 on
#Temp2.month = cast(SUBSTRING(#Temp1.date,5,2)as int)
答案 3 :(得分:0)
这是一个小错字,但恐慌,在比较中使用insert
代替ratio
以上更改将解决您的问题,但您仍然可以关注其他一些重要事项
1.避免使用关键字作为列名date
2.您不需要在date, month
中转换值,因为它在比较之前被隐式转换
INT