sql >> Database >  >> RDS >> Sqlserver

SQL Group By - Genereer meerdere samengevoegde kolommen uit één kolom

U kunt dit doen met behulp van gecorreleerde subquery's zoals deze:

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

Je kunt het ook beknopter doen, maar misschien met (aantoonbaar) iets minder leesbaarheid met behulp van de SUM truc:

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

In Oracle/PLSQL is de DECODE functie kan worden gebruikt om de CASE . te vervangen voor de nog beknoptere:

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. JPA Criteria Builder-volgorde op een somkolom

  2. Hoe het kolomtype te veranderen van karaktervarierend naar geheel getal met behulp van sqlalchemy-migrate

  3. Hoe PBKDF2 te gebruiken in Oracle 12c?

  4. Meerdere maximumrijen selecteren