我如何显示每位候选人的总票数百分比?

时间:2014-05-14 15:54:56

标签: sql sql-server vb.net

请原谅我这个问题的缓慢使用。

我正在尝试计算每位候选人的总票数和这些票数的百分比。

我的逻辑似乎没有起作用,因为我遇到了一个错误:

pct未声明

有任何想法如何解决这个问题?

        For Each row As DataRow In ds.Tables("choices").Rows
        Dim cmdAns As New SqlCommand("select count(*), 100.0 * ((SUM(candidateId)) / (SUM(SUM(candidateId))OVER())) AS pct from ElectionResults where candidateid=@cid", cnn)
        Dim pCid As New SqlParameter("@cid", row("candidateid"))
        cmdAns.Parameters.Add(pCid)
        Dim count As Integer = cmdAns.ExecuteScalar()
        row("CandidateName") = row("CandidateName") & " - " & count & "(" & pct & ") %"
    Next

2 个答案:

答案 0 :(得分:1)

您走在正确的轨道上,但取id的总和通常不是正确的方法。

select count(*),
       (100.0 * (cast(count(*) as float) / SUM(count(*)) over ()) AS pct
from ElectionResults
where candidateid = @cid;

因为SQL Server进行整数除法,所以要特别注意在括号的计算中不会发生这种情况。

答案 1 :(得分:0)

ExecuteScalar()只返回一个值:

  

执行查询,并返回第一行的第一列   查询返回的结果集。其他列或行是   忽略。

如果您选择多个字段,则需要使用ExecuteReader()

这样的事情应该有效:

For Each row As DataRow In ds.Tables("choices").Rows
    Dim cmdAns As New SqlCommand("select count(*),...candidateid=@cid", cnn)
    Dim pCid As New SqlParameter("@cid", row("candidateid"))
    cmdAns.Parameters.Add(pCid)
    Dim data As SqlDataReader
    data = command.ExecuteReader()
    While data.Read
     If data.HasRows = True Then
        Dim count As String = data(0)
        Dim pct As String = data(1)
        row("CandidateName") = row("CandidateName") & " - " & count & "(" & pct & ") %"
     End If
    End While
Next