简体   繁体   中英

Returning 2 count results in statement

I have two separate queries that count number of exceptions in my database. I need to return both results in the same query, how do I bring it all together correctly?

SELECT (
    IF EXISTS (SELECT *
        FROM
            exception AS ex
        INNER JOIN
            exceptionDefinition AS ed ON ex.exceptionDefId = ed.exceptionDefId
        WHERE
            ex.customerId='{5B65755C-3B66-434E-AC03-942004E9A27A}'
            AND ex.loanId IS NULL
            AND ex.exceptionState LIKE 'Y'
            AND ex.statusType LIKE 'required'
            AND ed.computationType LIKE 'computed'
        GROUP BY
            ex.customerId,
            ed.computationType,
            ex.exceptionState)
        BEGIN 
            SELECT computedExceptionCount = 1
        END
    ELSE
        BEGIN
            SELECT computedExceptionCount = 0
        END
    ) AS computedExceptionCount,

    (
    IF EXISTS (SELECT *
        FROM
            exception AS ex
        INNER JOIN
            exceptionDefinition AS ed ON ex.exceptionDefId = ed.exceptionDefId
        WHERE
            ex.customerId='{5B65755C-3B66-434E-AC03-942004E9A27A}'
            AND ex.loanId IS NULL
            AND ex.exceptionState LIKE 'Y'
            AND ex.statusType LIKE 'required'
            AND ed.computationType LIKE 'manual'
        GROUP BY
            ex.customerId,
            ed.computationType,
            ex.exceptionState)
        BEGIN 
            SELECT manualExceptionCount = 1
        END
    ELSE
        BEGIN
            SELECT manualExceptionCount = 0
        END
    ) AS manualExceptionCount

I am sure it is something simple.. more of a formatting issue than anything

Many thanks in advance.

Use CASE .

SELECT (
    CASE WHEN EXISTS (SELECT *
        FROM
            exception AS ex
        INNER JOIN
            exceptionDefinition AS ed ON ex.exceptionDefId = ed.exceptionDefId
        WHERE
            ex.customerId='{5B65755C-3B66-434E-AC03-942004E9A27A}'
            AND ex.loanId IS NULL
            AND ex.exceptionState LIKE 'Y'
            AND ex.statusType LIKE 'required'
            AND ed.computationType LIKE 'computed'
        GROUP BY
            ex.customerId,
            ed.computationType,
            ex.exceptionState)
    THEN 1
    ELSE 0
    END
    ) AS computedExceptionCount,

    (
    CASE WHEN EXISTS (SELECT *
        FROM
            exception AS ex
        INNER JOIN
            exceptionDefinition AS ed ON ex.exceptionDefId = ed.exceptionDefId
        WHERE
            ex.customerId='{5B65755C-3B66-434E-AC03-942004E9A27A}'
            AND ex.loanId IS NULL
            AND ex.exceptionState LIKE 'Y'
            AND ex.statusType LIKE 'required'
            AND ed.computationType LIKE 'manual'
        GROUP BY
            ex.customerId,
            ed.computationType,
            ex.exceptionState)
    THEN 1
    ELSE 0 
    END        
    ) AS manualExceptionCount

Why don't you declare computedExceptionCount and manualExceptionCount above, then select both in a simple select statement:

 Declare @computedExceptionCount INT, @manualExceptionCount INT
    Select @computedExceptionCount as computedExceptionCount,@manualExceptionCount as manualExceptionCount

or you can try like this

SELECT 
  case 
    when ed.computationType LIKE 'manual' then 1 
    else 0 
  end as manualExceptionCount,

  case 
    when ed.computationType LIKE 'computed' then 1
    else 0
  end as computedExceptionCount 
FROM exception AS ex
INNER JOIN
  exceptionDefinition AS ed ON ex.exceptionDefId = ed.exceptionDefId
WHERE ex.customerId='{5B65755C-3B66-434E-AC03-942004E9A27A}'
  AND ex.loanId IS NULL
  AND ex.exceptionState LIKE 'Y'
  AND ex.statusType LIKE 'required'

This will do it for you:

SELECT 
    sum(case ed.computationType LIKE 'computed' then 1 else 0 end) as computedExceptionCount,
    sum(case ed.computationType LIKE 'manual' then 1 else 0 end) as manualExceptionCount
FROM exception AS ex
JOIN exceptionDefinition AS ed ON ed.exceptionDefId = ex.exceptionDefId
WHERE ex.customerId='{5B65755C-3B66-434E-AC03-942004E9A27A}'
AND ex.loanId IS NULL
AND ex.exceptionState LIKE 'Y'
AND ex.statusType LIKE 'required'
GROUP BY ex.customerId,ed.computationType,ex.exceptionState

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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