SQL将在计数中显示0
我已经写了下面的查询。但是,我无法在相应的计数中得到0。您能告诉我如何加入此查询以显示0吗SQL将在计数中显示0,sql,Sql,我已经写了下面的查询。但是,我无法在相应的计数中得到0。您能告诉我如何加入此查询以显示0吗 SELECT b.collected AS Last_Week_Collected, a.collected AS THIS_Week_Collected, b.errored AS Last_Week_Errored, a.errored AS THIS_Week_Errored,
SELECT b.collected AS Last_Week_Collected,
a.collected AS THIS_Week_Collected,
b.errored AS Last_Week_Errored,
a.errored AS THIS_Week_Errored,
b.processed AS Last_Week_Processed,
a.processed AS THIS_Week_Processed
FROM (
SELECT stream_id,collected, errored, processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015'
) a ,
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015'
) b
WHERE a.stream_id=b.stream_id;
你可能想要这个输出
SELECT COALESCE(b.collected,0) AS Last_Week_Collected
,a.collected AS THIS_Week_Collected
,COALESCE(b.errored,0) AS Last_Week_Errored
,a.errored AS THIS_Week_Errored
,COALESCE(b.processed,0) AS Last_Week_Processed
,a.processed AS THIS_Week_Processed
FROM
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015'
)a LEFT JOIN
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5' AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015'
)
b ON a.stream_id=b.stream_id
你可能想要这个输出
SELECT COALESCE(b.collected,0) AS Last_Week_Collected
,a.collected AS THIS_Week_Collected
,COALESCE(b.errored,0) AS Last_Week_Errored
,a.errored AS THIS_Week_Errored
,COALESCE(b.processed,0) AS Last_Week_Processed
,a.processed AS THIS_Week_Processed
FROM
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015'
)a LEFT JOIN
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5' AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015'
)
b ON a.stream_id=b.stream_id
你可能想要这个输出
SELECT COALESCE(b.collected,0) AS Last_Week_Collected
,a.collected AS THIS_Week_Collected
,COALESCE(b.errored,0) AS Last_Week_Errored
,a.errored AS THIS_Week_Errored
,COALESCE(b.processed,0) AS Last_Week_Processed
,a.processed AS THIS_Week_Processed
FROM
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015'
)a LEFT JOIN
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5' AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015'
)
b ON a.stream_id=b.stream_id
你可能想要这个输出
SELECT COALESCE(b.collected,0) AS Last_Week_Collected
,a.collected AS THIS_Week_Collected
,COALESCE(b.errored,0) AS Last_Week_Errored
,a.errored AS THIS_Week_Errored
,COALESCE(b.processed,0) AS Last_Week_Processed
,a.processed AS THIS_Week_Processed
FROM
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015'
)a LEFT JOIN
(
SELECT stream_id,collected,errored ,processed
FROM processing_Stats_Archive
WHERE stream_id = '29' AND HR_OF_DAY ='5' AND TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015'
)
b ON a.stream_id=b.stream_id
从语法上看,您似乎正在使用一个
Oracle
数据库。因此,NVL
函数应该可以很好地为您工作。此外,由于您希望返回0
,而不是内部联接
,因此需要执行某种形式的外部联接(根据需要,可以是左联接、右联接或完全联接)。如果要返回两个查询中的所有行,则需要使用FULL OUTER JOIN
,如下所示:
SELECT nvl(b.collected, 0) AS Last_Week_Collected
,nvl(a.collected, 0) AS THIS_Week_Collected
,nvl(b.errored, 0) AS Last_Week_Errored
,nvl(a.errored, 0) AS THIS_Week_Errored
,nvl(b.processed, 0) AS Last_Week_Processed
,nvl(a.processed, 0) AS THIS_Week_Processed
FROM (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '03-09-2015'
) a
FULL OUTER JOIN (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '27-08-2015'
) b ON a.stream_id = b.stream_id;
从语法上看,您似乎正在使用一个Oracle
数据库。因此,NVL
函数应该可以很好地为您工作。此外,由于您希望返回0
,而不是内部联接
,因此需要执行某种形式的外部联接(根据需要,可以是左联接、右联接或完全联接)。如果要返回两个查询中的所有行,则需要使用FULL OUTER JOIN
,如下所示:
SELECT nvl(b.collected, 0) AS Last_Week_Collected
,nvl(a.collected, 0) AS THIS_Week_Collected
,nvl(b.errored, 0) AS Last_Week_Errored
,nvl(a.errored, 0) AS THIS_Week_Errored
,nvl(b.processed, 0) AS Last_Week_Processed
,nvl(a.processed, 0) AS THIS_Week_Processed
FROM (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '03-09-2015'
) a
FULL OUTER JOIN (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '27-08-2015'
) b ON a.stream_id = b.stream_id;
从语法上看,您似乎正在使用一个Oracle
数据库。因此,NVL
函数应该可以很好地为您工作。此外,由于您希望返回0
,而不是内部联接
,因此需要执行某种形式的外部联接(根据需要,可以是左联接、右联接或完全联接)。如果要返回两个查询中的所有行,则需要使用FULL OUTER JOIN
,如下所示:
SELECT nvl(b.collected, 0) AS Last_Week_Collected
,nvl(a.collected, 0) AS THIS_Week_Collected
,nvl(b.errored, 0) AS Last_Week_Errored
,nvl(a.errored, 0) AS THIS_Week_Errored
,nvl(b.processed, 0) AS Last_Week_Processed
,nvl(a.processed, 0) AS THIS_Week_Processed
FROM (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '03-09-2015'
) a
FULL OUTER JOIN (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '27-08-2015'
) b ON a.stream_id = b.stream_id;
从语法上看,您似乎正在使用一个Oracle
数据库。因此,NVL
函数应该可以很好地为您工作。此外,由于您希望返回0
,而不是内部联接
,因此需要执行某种形式的外部联接(根据需要,可以是左联接、右联接或完全联接)。如果要返回两个查询中的所有行,则需要使用FULL OUTER JOIN
,如下所示:
SELECT nvl(b.collected, 0) AS Last_Week_Collected
,nvl(a.collected, 0) AS THIS_Week_Collected
,nvl(b.errored, 0) AS Last_Week_Errored
,nvl(a.errored, 0) AS THIS_Week_Errored
,nvl(b.processed, 0) AS Last_Week_Processed
,nvl(a.processed, 0) AS THIS_Week_Processed
FROM (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '03-09-2015'
) a
FULL OUTER JOIN (
SELECT stream_id
,collected
,errored
,processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY = '5'
AND TO_CHAR(batch_Creation_date, 'DD-MON-YY') = '27-08-2015'
) b ON a.stream_id = b.stream_id;
其思想是,如果没有任何类型的连接或聚合函数(如MAX),则没有任何类型的连接或聚合函数(如MAX)可以帮助您。您应该使用单独的查询来检索单个“已收集”、“已出错”和“已处理”列,并将它们合并为0。我在这里的回答中使用了NVL
,认为您使用的是Oracle DBMS
试试这个:
SELECT (
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Processed )
UNION
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Collected,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Processed )
FROM DUAL
其思想是,如果没有任何类型的连接或聚合函数(如MAX),则没有任何类型的连接或聚合函数(如MAX)可以帮助您。您应该使用单独的查询来检索单个“已收集”、“已出错”和“已处理”列,并将它们合并为0。我在这里的回答中使用了NVL
,认为您使用的是Oracle DBMS
试试这个:
SELECT (
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Processed )
UNION
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Collected,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Processed )
FROM DUAL
其思想是,如果没有任何类型的连接或聚合函数(如MAX),则没有任何类型的连接或聚合函数(如MAX)可以帮助您。您应该使用单独的查询来检索单个“已收集”、“已出错”和“已处理”列,并将它们合并为0。我在这里的回答中使用了NVL
,认为您使用的是Oracle DBMS
试试这个:
SELECT (
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Processed )
UNION
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Collected,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Processed )
FROM DUAL
其思想是,如果没有任何类型的连接或聚合函数(如MAX),则没有任何类型的连接或聚合函数(如MAX)可以帮助您。您应该使用单独的查询来检索单个“已收集”、“已出错”和“已处理”列,并将它们合并为0。我在这里的回答中使用了NVL
,认为您使用的是Oracle DBMS
试试这个:
SELECT (
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '03-09-2015' ,0)
AS THIS_Week_Processed )
UNION
NVL(SELECT collected
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Collected,
NVL(SELECT errored
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Errored,
NVL (SELECT processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') = '27-08-2015' ,0)
AS Last_Week_Processed )
FROM DUAL
您可以使用条件聚合执行此操作:
SELECT NVL(Last_Week_Collected, 0) AS Last_Week_Collected,
NVL(THIS_Week_Collected, 0) AS THIS_Week_Collected,
NVL(Last_Week_Errored, 0) AS Last_Week_Errored,
NVL(THIS_Week_Errored, 0) AS THIS_Week_Errored,
NVL(Last_Week_Processed, 0) AS Last_Week_Processed,
NVL(THIS_Week_Processed, 0) AS THIS_Week_Processed
FROM
( SELECT MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN collected ELSE 0 END) AS Last_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN collected ELSE 0 END) AS THIS_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN errored ELSE 0 END) AS Last_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN errored ELSE 0 END) AS THIS_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN processed ELSE 0 END) AS Last_Week_Processed,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN processed ELSE 0 END) AS THIS_Week_Processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') IN ('27-08-2015', '03-09-2015')
) t;
您当前的查询只有在每周有一行的情况下才有效,因此我假设情况就是这样。因此,尽管我已经应用了MAX
函数,但它是一行的MAX
,因此没有任何意义
这是一个标量聚合,也就是说它有一个聚合函数,没有group by,无论是否有数据,它都将始终返回一行。您可以使用条件聚合:
SELECT NVL(Last_Week_Collected, 0) AS Last_Week_Collected,
NVL(THIS_Week_Collected, 0) AS THIS_Week_Collected,
NVL(Last_Week_Errored, 0) AS Last_Week_Errored,
NVL(THIS_Week_Errored, 0) AS THIS_Week_Errored,
NVL(Last_Week_Processed, 0) AS Last_Week_Processed,
NVL(THIS_Week_Processed, 0) AS THIS_Week_Processed
FROM
( SELECT MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN collected ELSE 0 END) AS Last_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN collected ELSE 0 END) AS THIS_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN errored ELSE 0 END) AS Last_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN errored ELSE 0 END) AS THIS_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN processed ELSE 0 END) AS Last_Week_Processed,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN processed ELSE 0 END) AS THIS_Week_Processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') IN ('27-08-2015', '03-09-2015')
) t;
您当前的查询只有在每周有一行的情况下才有效,因此我假设情况就是这样。因此,尽管我已经应用了MAX
函数,但它是一行的MAX
,因此没有任何意义
这是一个标量聚合,也就是说它有一个聚合函数,没有group by,无论是否有数据,它都将始终返回一行。您可以使用条件聚合:
SELECT NVL(Last_Week_Collected, 0) AS Last_Week_Collected,
NVL(THIS_Week_Collected, 0) AS THIS_Week_Collected,
NVL(Last_Week_Errored, 0) AS Last_Week_Errored,
NVL(THIS_Week_Errored, 0) AS THIS_Week_Errored,
NVL(Last_Week_Processed, 0) AS Last_Week_Processed,
NVL(THIS_Week_Processed, 0) AS THIS_Week_Processed
FROM
( SELECT MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN collected ELSE 0 END) AS Last_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN collected ELSE 0 END) AS THIS_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN errored ELSE 0 END) AS Last_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN errored ELSE 0 END) AS THIS_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN processed ELSE 0 END) AS Last_Week_Processed,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN processed ELSE 0 END) AS THIS_Week_Processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') IN ('27-08-2015', '03-09-2015')
) t;
您当前的查询只有在每周有一行的情况下才有效,因此我假设情况就是这样。因此,尽管我已经应用了MAX
函数,但它是一行的MAX
,因此没有任何意义
这是一个标量聚合,也就是说它有一个聚合函数,没有group by,无论是否有数据,它都将始终返回一行。您可以使用条件聚合:
SELECT NVL(Last_Week_Collected, 0) AS Last_Week_Collected,
NVL(THIS_Week_Collected, 0) AS THIS_Week_Collected,
NVL(Last_Week_Errored, 0) AS Last_Week_Errored,
NVL(THIS_Week_Errored, 0) AS THIS_Week_Errored,
NVL(Last_Week_Processed, 0) AS Last_Week_Processed,
NVL(THIS_Week_Processed, 0) AS THIS_Week_Processed
FROM
( SELECT MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN collected ELSE 0 END) AS Last_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN collected ELSE 0 END) AS THIS_Week_Collected,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN errored ELSE 0 END) AS Last_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN errored ELSE 0 END) AS THIS_Week_Errored,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '27-08-2015' THEN processed ELSE 0 END) AS Last_Week_Processed,
MAX(CASE WHEN TO_CHAR(batch_Creation_date,'DD-MON-YY')= '03-09-2015' THEN processed ELSE 0 END) AS THIS_Week_Processed
FROM processing_Stats_Archive
WHERE stream_id = '29'
AND HR_OF_DAY ='5'
AND TO_CHAR(batch_Creation_date,'DD-MON-YY') IN ('27-08-2015', '03-09-2015')
) t;
您当前的查询只有在每周有一行的情况下才有效,因此我假设情况就是这样。因此,尽管我已经应用了MAX
函数,但它是一行的MAX
,因此没有任何意义
这是一个标量聚合,也就是说它有一个聚合函数,没有group by,无论是否有数据,它都将始终返回一行。请尝试格式化查询。无法理解que。您可能需要的是一个而不是您编写的隐式内部联接。然后您可以使用COALESCE
将您的NULL
缺少的结果更改为0。您能帮我做一下吗