2016-09-20 42 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