SQL:在一行中显示结果

SQL:在一行中显示结果,sql,oracle,count,sum,Sql,Oracle,Count,Sum,我有一个根据状态列显示计数的查询 此查询: SELECT t2.id, t1.PDC_ID, t1.STATUS, COUNT(t1.ID) cnt FROM table1 t1, table2 t2 WHERE t1.dds_id = t2.id AND T2.ID = 75790 and T1.PDC_ID = 2 GROUP BY t1.PDC_ID, t2.id, t1.STATUS ID PDC_ID STATUS CN

我有一个根据状态列显示计数的查询

此查询:

SELECT t2.id, t1.PDC_ID, t1.STATUS, COUNT(t1.ID) cnt 
    FROM   table1 t1, table2 t2
    WHERE  t1.dds_id = t2.id
    AND    T2.ID = 75790 and T1.PDC_ID = 2
    GROUP BY t1.PDC_ID, t2.id, t1.STATUS
ID    PDC_ID   STATUS     CNT
75790   2       Active     13
75790   2       Inactive    3
返回:

SELECT t2.id, t1.PDC_ID, t1.STATUS, COUNT(t1.ID) cnt 
    FROM   table1 t1, table2 t2
    WHERE  t1.dds_id = t2.id
    AND    T2.ID = 75790 and T1.PDC_ID = 2
    GROUP BY t1.PDC_ID, t2.id, t1.STATUS
ID    PDC_ID   STATUS     CNT
75790   2       Active     13
75790   2       Inactive    3
是否有一种方法显示活动状态和两种状态的一行合计计数结果,例如:

ID    PDC_ID  ACTIVE_CNT  ALL_CNT
75790   2       13         16

谢谢

基本上只需通过和添加条件聚合来修复
组:

SELECT t2.id, SUM(CASE WHEN t1.STATUS = 'ACTIVE' THEN 1 ELSE 0 END) as ACTIVE_CNT, 
       COUNT(t1.ID) ALL_CNT 
FROM table1 t1 JOIN
     table2 t2
     ON t1.dds_id = t2.id
WHERE T2.ID = 75790 and T1.PDC_ID = 2
GROUP BY t1.PDC_ID;

请注意,我还修复了
FROM
子句,以使用正确、明确的
JOIN
语法。

基本上只是通过
修复
组并添加条件聚合:

SELECT t2.id, SUM(CASE WHEN t1.STATUS = 'ACTIVE' THEN 1 ELSE 0 END) as ACTIVE_CNT, 
       COUNT(t1.ID) ALL_CNT 
FROM table1 t1 JOIN
     table2 t2
     ON t1.dds_id = t2.id
WHERE T2.ID = 75790 and T1.PDC_ID = 2
GROUP BY t1.PDC_ID;

请注意,我还修复了
FROM
子句,以使用正确的显式
JOIN
语法。

您可以通过分析函数在分区上使用oracle
请参阅此处的文档

您可以通过分析函数在分区上使用oracle
请参阅此处的文档

谢谢!如果T2.ID列相同,则查询是完美的。假设我有两个身份证,我还需要看一排。谢谢!如果T2.ID列相同,则查询是完美的。假设我有两个ID,我还需要看一行。我怎么还能显示1行(没有ID,只有PDC_ID,每个ID有2个计数字段:活动和全部)?谢谢!如果T2.ID列相同,则查询是完美的。假设我有两个身份证,我还需要看一排。谢谢!如果T2.ID列相同,则查询是完美的。假设我有两个ID,我还需要看一行。如何仍然显示1行(没有ID,只有PDC_ID,每个ID有2个计数字段:活动和全部)?