在我的数据库中,我有一个名为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并将其显示在我的桌子上?
答案 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