From: | "T(dot) Steneker" <info(at)tsteneker(dot)nl> |
---|---|
To: | <pgsql-novice(at)postgresql(dot)org> |
Subject: | Problem with alias/case in query |
Date: | 2005-02-07 14:29:11 |
Message-ID: | 20050207142920.7F9C68B9E6E@svr1.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-novice |
Hello,
I'm having a problem with the following pretty large and complicated (for me
at least ;-)) query:
SELECT Campaign.ID, Campaign.name,
CampaignCategory.ID AS categoryID,
CampaignCategory.name AS categoryName,
(MAX(CampaignProductCommission.impressionCommissionFixed) * 1000) AS
cpmCommissionFixed,
MAX(CampaignProductCommission.clickCommissionFixed) AS
clickCommissionFixed,
MAX(CampaignProductCommission.leadCommissionFixed) AS
leadCommissionFixed,
MAX(CampaignProductCommission.saleCommissionFixed) AS
saleCommissionFixed,
MAX(CampaignProductCommission.saleCommissionVariable) AS
saleCommissionVariable,
CASE WHEN
CampaignSegment_Affiliate.campaignSegment_AffiliateStatusID >= 2 THEN
(
CampaignSegment_Affiliate.campaignSegment.ID
)
ELSE
(
SELECT CampaignSegment.ID
FROM CampaignSegment
WHERE CampaignSegment.isGeneral AND
CampaignSegment.campaignID = Campaign.ID
)
END AS "selectedSegmentID"
FROM Campaign
LEFT JOIN CampaignCategory ON (CampaignCategory.ID =
Campaign.campaignCategoryID)
LEFT JOIN CampaignSegment ON (CampaignSegment.campaignID = Campaign.ID)
LEFT JOIN CampaignSegment_Affiliate ON
(CampaignSegment_Affiliate.campaignSegmentID = "selectedSegmentID" AND
CampaignSegment_Affiliate.affiliateID = '" . $this->user->ID . "')
LEFT JOIN CampaignSegment_CampaignProduct ON
(CampaignSegment_CampaignProduct.campaignSegmentID = "selectedSegmentID")
LEFT JOIN CampaignProduct ON (CampaignProduct.ID
IN (
SELECT campaignProductID
FROM CampaignSegment_Affiliate
WHERE campaignSegmentID = "selectedSegmentID"
))
LEFT JOIN CampaignProductCommmission ON
(CampaignProductCommission.campaignProductID = CampaignProduct.ID)
WHERE Campaign.campaignStatusID = '2'
GROUP BY Campaign.ID, Campaign.name, Campaign.date, CampaignCategory.ID,
CampaignCategory.name
ORDER BY Campaign.date DESC, Campaign.ID DESC
LIMIT 5 OFFSET 0
So what it should do is this:
Select campaign ID, campaign name, campaign category ID, campaign category
name and the maximum cpm/click/lead and sale commission for the products in
the segment the affiliate belongs to.
It is possible that the affiliate doesn't belong to a segment yet
(CampaignSegment_Affiliate table). In that case it should use the "general"
segment, identified by the "isGeneral" field in the "CampaignSegment" table.
The problem with this query is that I cannot use "selectedSegmentID" (in the
CASE) in the LEFT JOIN beneath. Is there any other way I can do this in one
PGSQL query? Or is there anyone with a hint for me ;-)? I already searched
google and postgresql's documentation, but didn't find a way to do it yet.
Thanks a bunch in advance! I really appreciate your time :).
Kind regards,
Tim
From | Date | Subject | |
---|---|---|---|
Next Message | Schuhmacher, Bret | 2005-02-07 14:36:53 | Re: Stuck in "group by" aggregate hell |
Previous Message | Stephan Szabo | 2005-02-07 14:14:36 | Re: Stuck in "group by" aggregate hell |