我處理它有這樣的如何聚合來自一個字符串列數在SQL
ID cid Score
1 1 3 out of 3
2 1 1 out of 5
3 2 3 out of 6
4 3 7 out of 10
我想要的總金額和得分列的百分比這樣在CID分組值設計不良的數據庫列
cid sum percentage
1 4 out of 8 50
2 3 out of 6 50
3 7 out of 10 70
我該怎麼做?
我處理它有這樣的如何聚合來自一個字符串列數在SQL
ID cid Score
1 1 3 out of 3
2 1 1 out of 5
3 2 3 out of 6
4 3 7 out of 10
我想要的總金額和得分列的百分比這樣在CID分組值設計不良的數據庫列
cid sum percentage
1 4 out of 8 50
2 3 out of 6 50
3 7 out of 10 70
我該怎麼做?
你可以試試這個方法:
select
t.cid
, cast(sum(s.a) as varchar(5)) +
' out of ' +
cast(sum(s.b) as varchar(5)) as sum
, ((cast(sum(s.a) as decimal))/sum(s.b))*100 as percentage
from MyTable t
inner join
(select
id
, cast(substring(score,0,2) as Int) a
, cast(substring(score,charindex('out of', score)+7,len(score)) as int) b
from MyTable
) s on s.id = t.id
group by t.cid
重新設計表格,但即時的CTE。這裏的解決方案並不像你能做到的那麼簡短,但是它利用了便捷的SQL Server函數PARSENAME。如果要截斷而不是舍入,或者如果您希望它是十進制值,而不是整數,則可能需要調整百分比計算。
在這個或大多數任何解決方案中,您必須指望Score的列值爲您所顯示的特定格式。如果您有任何疑問,您應該進行其他檢查,以免錯過或誤解任何內容。
with
P(ID, cid, Score2Parse) as (
select
ID,
cid,
replace(Score,space(1),'.')
from scores
),
S(ID,cid,pts,tot) as (
select
ID,
cid,
cast(parsename(Score2Parse,4) as int),
cast(parsename(Score2Parse,1) as int)
from P
)
select
cid, cast(round(100e0*sum(pts)/sum(tot),0) as int) as percentage
from S
group by cid;
重新設計表格。將列分成兩部分有多難? –
絕對同意,但我需要一個快速修復,直到我這樣做,任何想法? – Slartibartfast