Reputation: 221
Can you please help me in combining the below 2 queries. The result should be as shown in attached image.
I would like to compare the balance between 2 queries and flag the balance when state balance is less than city balance.
select CT_ID, sum(balance) as StateBalance
from tblApp
where StateJurisdiction='New york'
group by CT_ID
order by CT_ID
select CT_ID, sum(balance) as CityBalance
from tblApp
where StateJurisdiction in ('BRONX','BROOKLYN')
group by CT_ID
order by CT_ID
Upvotes: 1
Views: 77
Reputation: 5157
You can do a simple INNER JOIN
between two queries:
SELECT a.CT_ID, StateBalance, CityBalance,
( CASE WHEN StateBalance < CityBalance THEN 'Yes' ELSE 'No' END ) AS Flag
FROM
( select CT_ID, sum(balance) as StateBalance
from tblApp
where StateJurisdiction='New york'
group by CT_ID
order by CT_ID ) AS a
INNER JOIN
( select CT_ID, sum(balance) as CityBalance
from tblApp
where StateJurisdiction in ('BRONX','BROOKLYN')
group by CT_ID
order by CT_ID ) AS b
ON a.CT_ID = b.CT_ID
Upvotes: 0
Reputation: 31879
Use conditional aggregation:
SELECT
CT_ID,
StateBalance = SUM(CASE WHEN StateJurisdiction = 'New York' THEN balance ELSE 0 END),
CityBalance = SUM(CASE WHEN StateJurisdiction IN('BRONX','BROOKLYN') THEN balance ELSE 0 END),
Flag =
CASE
WHEN
SUM(CASE WHEN StateJurisdiction = 'New York' THEN balance ELSE 0 END) <
SUM(CASE WHEN StateJurisdiction IN('BRONX','BROOKLYN') THEN balance ELSE 0 END)
THEN 'Yes'
ELSE
''
END
FROM tblApp
WHERE
StateJurisdiction IN('BRONX','BROOKLYN', 'New York')
GROUP BY CT_ID
ORDER BY CT_ID
Upvotes: 2