计算两个日期之间的行数

时间:2014-01-28 17:02:34

标签: c# javascript jquery sql

在我的数据库中,我有一个名为IsStaff的列名,其返回值为一位。因此,公司的员工可能患病(1)或员工没有疾病(0)。我如何编写一个sql查询,可以计算特定日期之间的所有1和0的数字,并在jquery表中表示它。这就是我所做的:

 public List<Staff> Method(string Date1, string Date2)
    {
        DateTime d = Convert.ToDateTime(Date1);
        string date1 = d.ToLongDateString();

        DateTime dd = Convert.ToDateTime(Date2);
        string date2 = dd.ToLongDateString();

        List<Staff> LBD = new List<Staff>();
        SqlConnection conn = new SqlConnection etc...
        SqlCommand command = new SqlCommand(@"SELECT * From TableName 
                                             WHERE Cast([Time] AS DATE) > @Time 
                                                 AND CAST([Time] AS DATE) < @Time2 
                                             ORDER BY Time Desc", conn);
        command.Parameters.AddWithValue("@Time", date1);
        command.Parameters.AddWithValue("@Time2", date2);

        conn.Open();
        SqlDatadata data = command.Executedata();
        while (data.Read())
        {
            Staff l = new Staff();
            l.IsStaff = data["IsStaff"].ToString();
            l.Name = data["Name"].ToString();
            ........
            LBD.Add(l);
        }
        conn.Close();
        return LBD;
    }
  

我可以成功获取两个日期之间的数据,但我如何获得特定员工生病的总时间?

function Table(data) {
        var table = '<table><tr><th>Name</th><th>Sum of ill staff</th><th>sum of none ill staff</th>';
        var rowID = 0;
        for (var staff in data) {

            var row = '<tr class=\'staff-row\'id=\'' + data[student].StaffID + '\'</tr>';
            row += '<td>' + data[staff].Name+ '</td>';
            row += '<td>' + data[staff].IsStaff + '</td>';
            row += '<td>' + data[staff].IsStaff + '</td>'
            rowID++;
            table += row;
        }

        table += '</table>';
        $('#displayTable').html(table);

    }

这是我动态生成的表格,第一列是“姓名”,显示所有员工,第二列是“病人总数”,应该显示在特定日期生病的员工,最后一列是'总和没有病的工作人员'应该显示一个没有生病的工作人员 Q1 - 计算一些员工的SQL查询是什么? Q2 - 我如何添加所有1并将其显示在我的桌子上?

2 个答案:

答案 0 :(得分:1)

为什么不计算SQL中的值?

        SqlCommand command = new SqlCommand(@"SELECT StaffID, Name, sum(IsStaff), 
                                              sum(case when IsStaff = 1 then 0 else 1 end) 
                                               From TableName 
                                             WHERE Cast([Time] AS DATE) > @Time 
                                                 AND CAST([Time] AS DATE) < @Time2 
                                             GROUP BY StaffID, Name
                                             ORDER BY Time Desc", conn);

或使用Linq获取从Staff列表中计算的值。

答案 1 :(得分:0)

在特定日期的使用之间计算所有1和0的数字:

    SELECT StaffID, count(IsStaff) From TableName                          
    WHERE Cast([Time] AS DATE) > @Time    
      AND CAST([Time] AS DATE) < @Time2 
    GROUP BY StaffID 
    ORDER BY count(IsStaff) desc

要获得特定员工生病的总时间,请使用:

    SELECT StaffID, sum(IsStaff) From TableName                          
    WHERE Cast([Time] AS DATE) > @Time    
      AND CAST([Time] AS DATE) < @Time2 
    GROUP BY StaffID
    ORDER BY sum(IsStaff) desc