1

学生のマークを格納するためのvarcharタイプの列がSQLテーブル(SQL 2008)にあります。マークのみを格納する場合、列を整数にキャストすることでマークの合計を計算できます。

Absentしかし、私は欠席者のために保管する必要があります。そして今、Absent整数にキャストして値を合計したときに、を挿入した後にエラーが表示されますAbsent

マークだけを合計して除外することは可能Absentですか?このように試しました

select sum(cast(Marks as integer))
from Results    
group by Marks
4

7 に答える 7

2

Group by句を追加する必要はありません。

集計関数で使用される列以外のSelectの他の列はありません。その場合、GROUPBYを指定する必要はありません。

select sum(cast(Marks as integer))
from Results    
where Marks <>'Absent'
于 2012-05-25T09:25:00.607 に答える
2

には整数列を使用するMarks必要があり、不在には独自の列が必要です。

現在の状況を修正するには、caseステートメントを使用できます。

select sum(case Marks when 'Absent' then 0 else Marks end)
于 2012-05-25T09:25:49.277 に答える
1
select sum(cast(Marks as integer))
from Results
where Marks <> 'Absent'

where句を追加するだけです!

于 2012-05-25T09:25:10.780 に答える
1

デコード関数を-として使用します

select sum(decode(Marks, 'Absent', 0, cast(Marks as integer)))
于 2012-05-25T09:25:35.757 に答える
1

多分このようなもの?

select sum(cast(Marks as integer))
from Results
where Marks <> 'Absent'
于 2012-05-25T09:25:36.957 に答える
1

不在がAbsent列にあると仮定します。これを試して -

select sum(IF(Marks = 'Absent', 0, cast(Marks as integer))) -- MySQL
select sum(decode(Marks, 'Absent', 0, cast(Marks as integer))) -- Oracle
from Results    
group by Marks;

また

select sum(cast(Marks as integer))
from Results
where Marks <> 'Absent'
group by Marks
于 2012-05-25T09:26:44.830 に答える
1

うわー、SQLServerでの私の好ましい解決策は単純に次のようになります。

select sum(case when isnumeric(Marks) = 1 then cast(Marks as Integer) end)
from Results

または、同等に:

select cast(Marks as Integer)
from Results
where isnumeric(Marks) = 1

ヒストグラムを作成しようとしているのでない限り、groupbyは不要です。

ちなみに、浮動小数点数は安全に整数に変換できないため、上記は依然としてエラーが発生しやすいです。あなたが好むかもしれません:

select cast(sum(case when isnumeric(Marks) = 1 then cast(Marks as float) end) as int)
from Results
于 2012-05-25T13:32:00.990 に答える