Reputation: 27
I have four tables AG_AGENTS, Px_PAXWEB, vw_POSTCODE, vwPXPaxWeb
and the fields are AG_AGENTS.SALES_AREA_DESC, Px_Paxweb.COUNTRY, vwPxPaxweb.SALES_AREA, vw_POSTCODE.POSTCODE
.
My query is returning all correct values except
When AG_AGENTS ='Dom. -NAT', if Px_PaxWeb.COUNTRY <> 'AUT' then vwPxPaxWeb.SALES_AREA ( returning correct value till here) if vwPxPaxWeb.SALES_AREA IS NULL Then AG_AGENTS.SALES_AREA_DESC
When AG_AGENTS ='Dom. -NAT', if Px_PaxWeb.COUNTRY ='AUT' Then vw_POSTCODE.POSTCODE( returning correct value till here) if vw_POSTCODE.POSTCODE IS NULL Then AG_AGENTS.SALES_AREA_DESC
Basically not returning AG_AGENTS.SALES_AREA_DESC when vw_POSTCODE.POSTCODE IS NULL and not returning AG_AGENTS.SALES_AREA_DESC when vwPxPaxWeb.SALES_AREA IS NULL
My SQL query is as below
CASE WHEN AG_AGENTS.SALES_AREA_DESC = 'Dom. - NAT'
THEN (
CASE WHEN PX_PAXWEB.COUNTRY = 'AUT' THEN vw_POSTCODE.POSTCODE
WHEN PX_PAXWEB.COUNTRY <> 'AUT' THEN vwPxPaxWeb.SALES_AREA
ELSE COALESCE (vw_POSTCODE.POSTCODE,vwPxPaxWeb.SALES_AREA,AG_AGENTS.SALES_AREA_DESC) END
)
ELSE
(
CASE WHEN AG_AGENTS.SALES_AREA_DESC = 'Int. – Inbound' Then vwPxPaxweb.SALES_AREA
ELSE COALESCE( vwPxPaxweb.SALES_AREA,AG_AGENTS.SALES_AREA_DESC) END
)
END AS SALES_AREA_DESC_2
Upvotes: 0
Views: 8668
Reputation: 3844
Try this:
CASE AG_AGENTS.SALES_AREA_DESC
WHEN 'Dom. - NAT' THEN
(
COALESCE(CASE
WHEN PX_PAXWEB.COUNTRY = 'AUT' THEN vw_POSTCODE.POSTCODE
WHEN PX_PAXWEB.COUNTRY <> 'AUT' THEN vwPxPaxWeb.SALES_AREA END,
AG_AGENTS.SALES_AREA_DESC)
)
WHEN 'Int. – Inbound' THEN vwPxPaxweb.SALES_AREA
ELSE COALESCE(vwPxPaxweb.SALES_AREA,AG_AGENTS.SALES_AREA_DESC)
END AS SALES_AREA_DESC_2
Upvotes: 0
Reputation: 1155
I tried to follow your description. Both seem to be solved with an ISNULL (shown below). But you say this doesn't work?
CASE WHEN AG_AGENTS.SALES_AREA_DESC = 'Dom. - NAT'
THEN CASE
WHEN PX_PAXWEB.COUNTRY = 'AUT'
THEN ISNULL(vw_POSTCODE.POSTCODE, AG_AGENTS.SALES_AREA_DESC) --#2 fix
WHEN PX_PAXWEB.COUNTRY <> 'AUT'
THEN ISNULL(vwPxPaxWeb.SALES_AREA,AG_AGENTS.SALES_AREA_DESC) --#1 fix
ELSE COALESCE (vw_POSTCODE.POSTCODE,vwPxPaxWeb.SALES_AREA,AG_AGENTS.SALES_AREA_DESC)
END
ELSE CASE
WHEN AG_AGENTS.SALES_AREA_DESC = 'Int. – Inbound'
THEN vwPxPaxweb.SALES_AREA
ELSE COALESCE(vwPxPaxweb.SALES_AREA,AG_AGENTS.SALES_AREA_DESC)
END
END AS SALES_AREA_DESC_2
Upvotes: 1