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. MySQLの操作の順序?

    2. Oracle 11gは、一致するすべてのオカレンスを正規表現で取得します

    3. ノードJsmysql(およびmysql2)ECONNRESET

    4. MySqlからDerby(JAVADB)にデータを移行する簡単な方法は?