2016-10-20 6 views
0

ich will die Krankheit insgesamt und letzte Woche insgesamt aus dieser Tabelle (tb_data) erhalten:Sql - Zusammenführen von zwei Abfrage machen Reihen

P_ID Disease    Date 
1  A      2016-10-11 
2  A      2016-10-11 
3  A      2016-10-14 
4  A      2016-10-19 

während ich Abfrage wie diese:

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; 

, was ich will als Ergebnis ist wie dieser

DT PT DLW PLW 
A 4 A 3 

nicht diese

DT PT 
A 4 
A 3 

, weil ich mein Programm lesen Sie dies wollen:

foreach (DataRow kolom in table.Rows) 
       { 
        Total = kolom["PT"].ToString(); 
        Lastweek = kolom["PLW"].ToString(); 
       } 
labelTotal.Text = Total; 
labelLastWeek.Text = Lastweek; 

thx im Voraus

Antwort

1

Ich denke bedingte Aggregation ist das, was Sie brauchen.

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; 

Ergebnis

+------+------+------+------+ 
| dt | pt | dlw | plw | 
+------+------+------+------+ 
| A | 4 | A | 3 | 
+------+------+------+------+ 
+0

wow ich heute etwas Neues lernen, danke! –