sql >> Databáze >  >> RDS >> Sqlserver

SQL Group By - Generování více agregovaných sloupců z jednoho sloupce

Můžete to udělat pomocí korelovaných poddotazů takto:

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

Můžete to udělat také stručněji, ale možná s (pravděpodobně) o něco menší čitelností pomocí SUM trik:

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

V Oracle/PLSQL, DECODE funkci lze použít k nahrazení CASE pro ještě stručnější:

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. JSON_QUOTE() – Jak uniknout ze znaků v řetězcích používaných jako hodnoty JSON v MySQL

  2. výraz oracle nesprávného typu při kontrole proměnné

  3. Kvůli chybě syntaxe se v DB nevytváří tabulka

  4. Jak převést řetězec se zlomkem na float v Pythonu