I am trying to group multiple columns based on a case statement.
My current code is as follows :
x
SELECT
p.SCODE AS PropNumber, p.SADDR1 AS propname,
(CASE
WHEN ut.scode LIKE '%m%' THEN 'Market'
WHEN ut.scode LIKE '%t%' THEN 'LIHTC'
WHEN ut.scode LIKE '%p%' THEN 'LIHTC/PHA'
WHEN ut.scode LIKE '%s%' THEN 'S8'
ELSE 'Other'
END) AS detail_group,
COUNT(ut.scode) AS UnitCount,
(SELECT COUNT(*) AS MoveIns
FROM tenant t1
JOIN unit u1 ON t1.hunit = u1.hmy
JOIN property p1 ON p1.hmy = u1.hproperty
JOIN unittype ut1 ON ut1.hmy = u1.HUNITTYPE
WHERE t1.dtmovein >= getdate() - 14
AND p1.scode IN ('gsaff')
AND p1.scode = p.scode
AND p1.saddr1 = p.saddr1
AND ut1.scode = ut.scode) MoveIns
FROM
Property p
JOIN
unit u ON u.hproperty = p.hmy
JOIN
unittype ut ON ut.hmy = u.hunittype
WHERE
p.scode IN ('gsaff')
AND u.exclude = 0
AND ut.scode IN (SELECT ut22.scode FROM unittype ut22 GROUP BY ut22.scode)
GROUP BY
(CASE
WHEN ut.scode LIKE '%m%' THEN 'Market'
WHEN ut.scode LIKE '%t%' THEN 'LIHTC'
WHEN ut.scode LIKE '%p%' THEN 'LIHTC/PHA'
WHEN ut.scode LIKE '%s%' THEN 'S8'
ELSE 'Other'
END), p.scode, p.SADDR1, ut.scode
The results look like this :
PropNumber propname detail_group UnitCount MoveIns
gsaff Gardens at South Bay, LTD (gsaff) Market 3 0
gsaff Gardens at South Bay, LTD (gsaff) Market 8 0
gsaff Gardens at South Bay, LTD (gsaff) Market 7 0
gsaff Gardens at South Bay, LTD (gsaff) Market 2 0
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 3 0
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 17 1
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 23 3
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 11 0
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 2 0
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 10 0
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 11 0
gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 2 0
What I want is to roll up all Market and and lihtc/pha into one group so the results would look like :
PropNumber propname detail_group UnitCount MoveIns gsaff Gardens at South Bay, LTD (gsaff) Market 20 0 gsaff Gardens at South Bay, LTD (gsaff) LIHTC/PHA 79 4
The actual data in the unit type is m1,m2, m3 and tc1, tc2,etc so that is the cause for the multiple lines when linking back in the subquery on ut1.scode = ut.scode. I also realize i can only return one value in the subquery so am guessing i need to somehow use an exist within the where statement to accomplish this.
Advertisement
Answer
If the results of your query are correct, then all you need is group by
on that query:
select
t.PropNumber, t.propname, t.detail_group,
sum(t.UnitCount) UnitCount, sum(t.MoveIns) MoveIns
from (
<your query>
) t
group by
t.PropNumber, t.propname, t.detail_group