#c# #mysql
#c# #mysql
Вопрос:
я хочу получить общее количество заболеваний и общее количество за последнюю неделю из этой таблицы (tb_data):
P_ID Disease Date
1 A 2016-10-11
2 A 2016-10-11
3 A 2016-10-14
4 A 2016-10-19
пока у меня есть запрос, подобный этому:
SELECT Disease AS DT,
COUNT(P_ID) AS PT
FROM tb_data
GROUP BY Disease
union
SELECT Disease AS DLW,
COUNT(P_ID) AS PLW
FROM tb_data
WHERE Date >= curdate() - INTERVAL DAYOFWEEK(curdate()) 6 DAY
AND Date < curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY
GROUP BY Disease
ORDER BY 2 DESC, 1;
то, что я хочу в результате, выглядит следующим образом
DT PT DLW PLW
A 4 A 3
не это
DT PT
A 4
A 3
потому что я хочу, чтобы моя программа прочитала это:
foreach (DataRow kolom in table.Rows)
{
Total = kolom["PT"].ToString();
Lastweek = kolom["PLW"].ToString();
}
labelTotal.Text = Total;
labelLastWeek.Text = Lastweek;
заранее спасибо
Ответ №1:
Я думаю, что условная агрегация — это то, что вам нужно.
select disease as dt,
sum(1) as pt,
disease as dlw,
sum(case when date between curdate() - INTERVAL DAYOFWEEK(curdate()) 6 DAY and curdate() - INTERVAL DAYOFWEEK(curdate())-1 DAY then 1 else 0 end) as plw
from tb_data
group by disease;
Результат
------ ------ ------ ------
| dt | pt | dlw | plw |
------ ------ ------ ------
| A | 4 | A | 3 |
------ ------ ------ ------