2016-09-20 67 views
0

我有如下表:如何在SQL服务器中逐行计算比率?

Spect isin ticker 
bonds  55  26 
equity 36  89 

而另一个问题:

Spect totalnb 
bonds  200 
equity  200 

我想计算伊辛和规范的totalnb之间的比值股票一样在SQL服务器:

Spect ratio_isin ratio_ticker 
bonds  27  13 
equity 18  39 

我已经试过this solution,但它只适用于2列

+3

请说明您所使用的逻辑。它看起来像是你除以2. –

+0

什么是你的(isin和ticker)列的数据类型? –

回答

0

您可以使用一个简单的加入如下

/* 
create table SpectDetail(Spect varchar(10), isin int, ticker int) 
create table SpectTotal(Spect varchar(10), totalnb int) 
insert into SpectDetail select 'bonds',55,26 
insert into SpectDetail select 'equity',36,89 
insert into SpectTotal select 'bonds',200 
insert into SpectTotal select 'equity',200 
*/ 
select 
    t.Spect, 
    d.isin * 100/t.totalnb ratio_isin, 
    d.ticker * 100/ t.totalnb ratio_ticker 
from SpectTotal t 
inner join SpectDetail d on d.Spect = t.Spect 

我希望它能帮助,

0

你的意思呢?

select t1.spect 
, t1.isin/t2.totalnb * 100 as ratio_isin 
, t1.ticker/t2.totalnb * 100 as ratio_ticker 
from table1 t1 
inner join table2 t2 on t2.Spect = t1.spect 
0

如果你的ISIN并北京时间列INT:

SELECT 
    T1.Spect, 
    CAST((CAST (T1.ISIN AS DECIMAL(10,2))/CAST(T2.TotalNB AS DECIMAL(10,2)))*100 AS INT) AS Ratio_ISIN, 
    CAST((CAST (T1.Ticker AS DECIMAL(10,2))/CAST(T2.TotalNB AS DECIMAL(10,2)))*100 AS INT) AS Ratio_Ticker 
FROM @tblTest1 T1 
LEFT JOIN @tblTest2 T2 ON T1.Spect=T2.Spect 

如果你的ISIN并北京时间列是十进制:

SELECT 
    T1.Spect, 
    CAST((T1.ISIN/T2.TotalNB)*100 AS INT) AS Ratio_ISIN, 
    CAST((T1.Ticker/T2.TotalNB)*100 AS INT) AS Ratio_Ticker 
FROM @tblTest1 T1 
LEFT JOIN @tblTest2 T2 ON T1.Spect=T2.Spect