合并两列上的两个SQL查询

合并两列上的两个SQL查询,sql,Sql,我有两个问题。我想合并一个表和两列 SELECT COUNT(IsApproved) as CountNotApproved FROM Erp_OrderReceipt WHERE IsApproved = 0 及 您可以使用Union和group SELECT SUM(CountApproved) CountApproved, SUM(CountNotApproved) CountNotApproved FROM ( SELECT 0 a

我有两个问题。我想合并一个表和两列

SELECT COUNT(IsApproved) as CountNotApproved
FROM Erp_OrderReceipt 
WHERE IsApproved = 0 


您可以使用Union和group

 SELECT SUM(CountApproved) CountApproved, 
        SUM(CountNotApproved) CountNotApproved
 FROM
 (
    SELECT 
        0 as CountApproved,
        COUNT(IsApproved) as CountNotApproved
    FROM Erp_OrderReceipt where IsApproved=0 
    UNION
    SELECT 
        COUNT(IsApproved) as CountApproved,
        0 as CountNotApproved
    FROM Erp_OrderReceipt where IsApproved=1
 ) u

您可以使用Union和group

 SELECT SUM(CountApproved) CountApproved, 
        SUM(CountNotApproved) CountNotApproved
 FROM
 (
    SELECT 
        0 as CountApproved,
        COUNT(IsApproved) as CountNotApproved
    FROM Erp_OrderReceipt where IsApproved=0 
    UNION
    SELECT 
        COUNT(IsApproved) as CountApproved,
        0 as CountNotApproved
    FROM Erp_OrderReceipt where IsApproved=1
 ) u

您可以为此使用条件聚合:

SELECT COUNT(case when IsApproved = 0 then 0 end) as CountNotApproved, 
       COUNT(case when IsApproved = 1 then 1 end) as CountApproved
FROM Erp_OrderReceipt;
这是因为聚合函数忽略
NULL
值。对于不符合条件的所有行,
大小写的结果为
NULL

如果您的DBMS支持这一点,您还可以使用ANSI SQL
filter
子句:

SELECT COUNT(*) FILTER (where IsApproved = 0) as CountNotApproved, 
       COUNT(*) FILTER (where IsApproved = 1) as CountApproved
FROM Erp_OrderReceipt

您可以为此使用条件聚合:

SELECT COUNT(case when IsApproved = 0 then 0 end) as CountNotApproved, 
       COUNT(case when IsApproved = 1 then 1 end) as CountApproved
FROM Erp_OrderReceipt;
这是因为聚合函数忽略
NULL
值。对于不符合条件的所有行,
大小写的结果为
NULL

如果您的DBMS支持这一点,您还可以使用ANSI SQL
filter
子句:

SELECT COUNT(*) FILTER (where IsApproved = 0) as CountNotApproved, 
       COUNT(*) FILTER (where IsApproved = 1) as CountApproved
FROM Erp_OrderReceipt