Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Group By - Генериране на множество сборни колони от една колона

Можете да го направите, като използвате корелирани подзаявки като това:

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

Можете също да го направите по-сбито, но може би с (вероятно) малко по-малко четливост, като използвате SUM трик:

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

В Oracle/PLSQL, DECODE може да се използва за заместване на CASE за още по-сбито:

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. Как се прави GROUP BY, чувствителен към малки и големи букви?

  2. Как да създадете временни таблици в SQL Server чрез MS Access

  3. Как да управлявате GetDate() с Entity Framework

  4. Екранирането на екраниращия знак не работи – SQL LIKE оператор

  5. Как да генерирате план за изпълнение в SQL Server