Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同一语句中的SQL属性变量_Sql_Oracle - Fatal编程技术网

同一语句中的SQL属性变量

同一语句中的SQL属性变量,sql,oracle,Sql,Oracle,使用以下语句可以根据状态为我提供4列位置、描述、父项、计数: SELECT KINCIDENT.location, LOCATIONS.description, LOCHIERARCHY.parent, count(KINCIDENT.incnum) FROM KINDICENT, LOCATIONS, LOCHIERARCHY WHERE KINCIDENT.location = LOCATIONS.location and LOCATIONS

使用以下语句可以根据状态为我提供4列位置、描述、父项、计数:

SELECT 
    KINCIDENT.location, LOCATIONS.description, 
    LOCHIERARCHY.parent, count(KINCIDENT.incnum)
FROM 
    KINDICENT, LOCATIONS, LOCHIERARCHY
WHERE 
    KINCIDENT.location = LOCATIONS.location 
    and LOCATIONS.location = LOCHIERARCHY.location 
    AND KINCIDENT.status = 'ECCAPR'
GROUP BY 
    KINCIDENT.location, LOCATIONS.description, LOCHIERARCHY.parent 
ORDER BY 
    parent;

但是,我希望第5列给出计数,但当KINCIDENT.status='FSAPR'时。如何指定每个计数列的状态?

您需要条件聚合。您还应该学习使用显式联接:

我还引入了表别名,这通常使查询更易于编写和读取。

-20多年前,在ANSI-92 SQL标准中,用正确的ANSI JOIN语法取代了老式的逗号分隔表列表样式,不鼓励使用它
SELECT k.location, l.description, h.parent,
       SUM(CASE WHEN k.status = 'ECCAPR' THEN 1 ELSE 0 END) as cnt_ECCAPR,
       SUM(CASE WHEN k.status = 'FSAPR' THEN 1 ELSE 0 END) as cnt_FSAPR
FROM KINDICENT k JOIN
     LOCATIONS l
     ON  k.location = l.location JOIN
     LOCHIERARCHY h
     ON l.location =  h.location    
GROUP BY k.location, l.description, h.parent
ORDER BY parent;