从2个表sql server乘以值

时间:2018-05-02 09:49:41

标签: sql sql-server

我有两个表,如果满足条件,我们想要将值相乘。我看了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)

4 个答案:

答案 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