Sql — объединить два запроса, чтобы сделать его строками

#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 |
 ------ ------ ------ ------