Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Group By - Generuj wiele kolumn zagregowanych z jednej kolumny

Możesz to zrobić za pomocą skorelowanych podzapytań w ten sposób:

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

Możesz też zrobić to bardziej zwięźle, ale być może z (prawdopodobnie) nieco mniejszą czytelnością za pomocą SUM sztuczka:

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

W Oracle/PLSQL DECODE funkcja może być użyta do zastąpienia CASE dla jeszcze bardziej zwięzłego:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zignorować błąd zduplikowanego klucza w T-SQL (SQL Server)

  2. Jak wybrać wiersz zmiennej w programie SQL Server?

  3. Eksportuj tabelę w SQL Server 2008

  4. Dlaczego tworzysz widok w bazie danych?

  5. wyświetlić zmienione wartości po zaktualizowaniu instrukcji