Reputation: 99
I have a query like this:
SELECT COUNT(DISTINCT ACCOUNT_CODE), ZERO_DAYS_FLAG FROM (
SELECT SUM (CLASS_BELOW_BALANCE) AS ZERO_DAYS_FLAG, ACCOUNT_CODE
FROM ACCOUNT_BALANCES
WHERE MERCHANT_STATUS != 'Suspended'
AND MERCHANT_CSP_CODE IN ('1' , '2' , '3' , '4' , '5' , '6' , '7')
AND CHECK_BALANCE_DATE BETWEEN '01-SEP-15' AND '30-SEP-15'
GROUP BY ACCOUNT_CODE) GROUP BY ZERO_DAYS_FLAG ORDER BY ZERO_DAYS_FLAG;
and the result in:
COUNT(DISTINCTACCOUNT_CODE) ZERO_DAYS_FLAG
--------------------------- ----------------------
2026 0
2036 1
2005 2
1874 3
2020 4
2074 5
2224 6
2343 7
2460 8
2666 9
2606 10
2511 11
2571 12
What i need is adding a case when the ZERO_DAYS_FLAG is greater than 6 then the result to be summed as 6 days like this:
COUNT(DISTINCTACCOUNT_CODE) ZERO_DAYS_FLAG
--------------------------- ----------------------
2026 0
2036 1
2005 2
1874 3
2020 4
2074 5
2224 6+
Upvotes: 1
Views: 65
Reputation: 425428
Use this CASE
expression:
CASE WHEN ZERO_DAYS_FLAG > 5 THEN '+6' ELSE CAST(ZERO_DAYS_FLAG AS CHAR) END
Like this:
SELECT
COUNT(DISTINCT ACCOUNT_CODE),
CASE WHEN ZERO_DAYS_FLAG > 5 THEN '6+' ELSE CAST(ZERO_DAYS_FLAG AS CHAR) END ZERO_DAYS_FLAG
FROM (
SELECT SUM(CLASS_BELOW_BALANCE) AS ZERO_DAYS_FLAG, ACCOUNT_CODE
FROM ACCOUNT_BALANCES
WHERE MERCHANT_STATUS != 'Suspended'
AND MERCHANT_CSP_CODE IN ('1' , '2' , '3' , '4' , '5' , '6' , '7')
AND CHECK_BALANCE_DATE BETWEEN '01-SEP-15' AND '30-SEP-15'
GROUP BY ACCOUNT_CODE) X
GROUP BY CASE WHEN ZERO_DAYS_FLAG > 5 THEN '6+' ELSE CAST(ZERO_DAYS_FLAG AS CHAR) END
ORDER BY CASE WHEN ZERO_DAYS_FLAG > 5 THEN '6+' ELSE CAST(ZERO_DAYS_FLAG AS CHAR) END;
Note: The value "6+" in the original query has been changed to "+6" to allow it to still be recognised as an integer in case the result is also being used by an application. All credit to OP for this idea.
Upvotes: 2
Reputation: 2320
SELECT
COUNT(DISTINCT ACCOUNT_CODE),
CASE WHEN ZERO_DAYS_FLAG > 6 THEN '6+' ELSE ZERO_DAYS_FLAG || '' END AS zero_days_flag
FROM (
SELECT
SUM (CLASS_BELOW_BALANCE) AS ZERO_DAYS_FLAG, ACCOUNT_CODE
FROM ACCOUNT_BALANCES
WHERE MERCHANT_STATUS != 'Suspended'
AND MERCHANT_CSP_CODE IN ('1' , '2' , '3' , '4' , '5' , '6' , '7')
AND CHECK_BALANCE_DATE BETWEEN '01-SEP-15' AND '30-SEP-15'
GROUP BY ACCOUNT_CODE)
GROUP BY ZERO_DAYS_FLAG ORDER BY ZERO_DAYS_FLAG;
Upvotes: 0