Sql-替代使用。。。像

Sql-替代使用。。。像,sql,oracle,Sql,Oracle,有没有一种有效的SQL替代方案?我不想用。。。因为,这是主要标准 WITH TEMP_TABLE AS ( SELECT status, COUNT(1) as total FROM XYZ GROUP BY status ) SELECT NVL((SELECT TOTAL FROM TEMP_TABLE WHERE STATUS = 'A'),0) AS A_COUNT , NVL((SELECT TOTAL FROM TEMP_T

有没有一种有效的SQL替代方案?我不想用。。。因为,这是主要标准

WITH TEMP_TABLE AS (
     SELECT status, COUNT(1) as total FROM XYZ GROUP BY status
    )
SELECT 
         NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'A'),0) AS A_COUNT ,
         NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'B'),0) AS B_COUNT ,
         NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'C'),0) AS C_COUNT ,
         NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'D'),0) AS D_COUNT , 
         NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'E'),0) AS E_COUNT ,
         NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'F'),0) AS F_COUNT  
FROM DUAL; 

我读过类似的问题,但它们使用了其他ddl内容,我只需要一个基本的SQL语句。

只需使用条件聚合:

SELECT SUM(CASE WHEN STATUS = 'A' THEN 1 ELSE 0 END) AS A_COUNT ,
       SUM(CASE WHEN STATUS = 'B' THEN 1 ELSE 0 END) AS B_COUNT ,
       SUM(CASE WHEN STATUS = 'C' THEN 1 ELSE 0 END) AS C_COUNT ,
       SUM(CASE WHEN STATUS = 'D' THEN 1 ELSE 0 END) AS D_COUNT ,
       SUM(CASE WHEN STATUS = 'E' THEN 1 ELSE 0 END) AS E_COUNT ,
       SUM(CASE WHEN STATUS = 'F' THEN 1 ELSE 0 END) AS F_COUNT 
FROM XYZ ;
我应该指出,将值放在单独的行上更容易:

select status, count(*)
from xyz
group by status;

这是一个简单的PIVOT查询

select *
from (select status from XYZ )
pivot (
   count(*) for status in (
      'A' as a_count, 'B' as b_count, 
      'C' as c_count, 'D' as d_count, 
      'E' as e_count, 'F' as f_count 
));

已经给出的答案是完美的,你应该使用它们。然而,为了给您提供一个通用的解决方案,您可能必须转换其他查询,它将是:

SELECT 
     NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'A'),0) AS A_COUNT ,
     NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'B'),0) AS B_COUNT ,
     NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'C'),0) AS C_COUNT ,
     NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'D'),0) AS D_COUNT , 
     NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'E'),0) AS E_COUNT ,
     NVL((SELECT TOTAL  FROM TEMP_TABLE WHERE STATUS = 'F'),0) AS F_COUNT  
FROM 
    (SELECT status, COUNT(1) as total FROM XYZ GROUP BY status) TEMP_TABLE; 

几秒钟内就有答案:现在就尝试!在我的例子中,将它们放在同一行更为实际,因为我将尝试将结果转换为json对象,所以您想知道如何从语句中删除?CTE是非常强大和高效的。。。为什么你想摆脱它?是的,我知道并且喜欢它,但原因是Mule平台不支持它,至少在实用方面不支持它。请检查这个谢谢解释,我不明白