sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Group By - Generera flera aggregerade kolumner från en enda kolumn

Du kan göra det med hjälp av korrelerade underfrågor så här:

SELECT 
  Company, 
  Date, 
  (SELECT COUNT(*) FROM MyTable AS T1 
     WHERE T1.Flag='Y' AND T1.Company=T2.Company AND T1.Date=T2.Date) AS Count_Y,
  (SELECT COUNT(*) FROM MyTable AS T1 
     WHERE T1.Flag='N' AND T1.Company=T2.Company AND T1.Date=T2.Date) AS Count_N
FROM MyTable AS T2
GROUP BY Company, Date

Du kan också göra det mer kortfattat, men kanske med (förmodligen) något mindre läsbarhet med SUM knep:

SELECT 
  Company, 
  Date, 
  SUM(CASE WHEN Flag='Y' THEN 1 ELSE 0 END) AS Count_Y,
  SUM(CASE WHEN Flag='N' THEN 1 ELSE 0 END) AS Count_N,
FROM MyTable
GROUP BY Company, Date

I Oracle/PLSQL, DECODE funktionen kan användas för att ersätta CASE för det ännu mer kortfattade:

SELECT 
  Company, 
  Date, 
  SUM(DECODE(Flag,'Y',1,0)) AS Count_Y,
  SUM(DECODE(Flag,'N',1,0)) AS Count_N,
FROM MyTable
GROUP BY Company, Date


  1. Hur man hämtar data från mysql-databasen

  2. NodeJS:MySQL väcker ibland ETIMEDOUT-fel

  3. PL/MySQL finns det?

  4. Exekvera en lagrad procedur med markören i PHP