繁体   English   中英

Oracle SQL:连接同一表并获得所需的输出

[英]Oracle SQL: Joining same table and getting desired output

我有这样的桌子

FILEID    | FILENAME               | STATUS
100       |Employee_06102016.txt   |PASS
100       |Employee_06092016.txt   |FAIL
100       |Employee_06092016.txt   |MISS
101       |ABC_06092016.txt        |PASS

我正在从文件中读取文件名并传递给SQL。 可以说,我只有文件名'Emplyee_06102016.txt',它具有PASS staus。 有了这个,我需要加入同一个表,并计算具有相同文件ID的PASS和FAIL文件名的数量,并且应该排除MISS状态。

我在下面尝试这样的事情,但算在内数为3。 我应该只有2。

SELECT COUNT (T.FILEID)  FROM TABLE_NAME T, TABLE_NAME S
WHERE T.FILEID=S.FILEID
AND T.FILENAME = 'Employee_06102016.txt' AND T.STATUS IN ('PASS', 'FAIL');

Oracle安装程序

CREATE TABLE table_name ( FILEID, FILENAME, STATUS ) AS
SELECT 100, 'Employee_06102016.txt', 'PASS' FROM DUAL UNION ALL
SELECT 100, 'Employee_06092016.txt', 'FAIL' FROM DUAL UNION ALL
SELECT 100, 'Employee_06092016.txt', 'MISS' FROM DUAL UNION ALL
SELECT 101, 'ABC_06092016.txt',      'PASS' FROM DUAL;

查询

SELECT *
FROM   (
  SELECT t.*,
         COUNT(1) OVER ( PARTITION BY FileID ) AS num_pass_fail
  FROM   table_name t
  WHERE  status IN ( 'PASS', 'FAIL' )
)
WHERE  filename = 'Employee_06102016.txt';

输出

    FILEID FILENAME              STATUS NUM_PASS_FAIL
---------- --------------------- ------ -------------
       100 Employee_06102016.txt PASS               2 
SELECT
   FILENAME,
   SUM(CASE status WHEN 'PASS' THEN 1 ELSE 0 END) as "Pass Count",
   SUM(CASE status WHEN 'FAIL' THEN 1 ELSE 0 END) as "Fail Count",
   SUM(CASE status WHEN 'MISS' THEN 1 ELSE 0 END) as "Miss Count"
FROM
   TableName
WHERE
   FILENAME = 'Employee_06102016.txt'

看来您只需要:

SELECT COUNT (1)
FROM TABLE_NAME
WHERE FILENAME = 'Employee_06102016.txt'
  AND STATUS IN ('PASS', 'FAIL');

试试这个

select cnt from ( 
    select count(*) as cnt, 
      listagg(filename, ',') within group(order by filename) as filename_list  from table_name 
     where status in ('PASS', 'FAIL') group by fileid
 ) where instr(filename_list, 'Employee_06102016.txt')>0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM