sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Group By - Generer flere aggregerede kolonner fra en enkelt kolonne

Du kan gøre det ved at bruge korrelerede underforespørgsler som denne:

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 også gøre det mere kortfattet, men måske med (formentlig) lidt mindre læsbarhed ved at bruge SUM trick:

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 er DECODE funktionen kan bruges til at erstatte CASE for det endnu mere kortfattede:

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. Optimering af Oracle CONNECT BY, når det bruges med WHERE-sætning

  2. Vil du oprette forbindelse til mysql 5.0-databasen ved hjælp af rent vbscript?

  3. Kan ikke springe til række 0 på MySQL resultatindeks 13

  4. Mysql - Mysql2::Fejl:Forkert strengværdi: