|
Birgitta, Thank you so much for enlightening me on the concept of CTE's. I solved the problem using this query and it worked perfectly for me. Performance is not too bad either. May be I can improve on that...:). With x as (Select ITMNUM as xItemNo, Max(DTEEFF) as xMyDate, PRCUOM as xPRCUOM from ec30data.ITMPRC where IBBRCH = ' ' Group By ITMNUM, PRCUOM), y as (Select xItemNo as yItemNo, xMyDate as yMyDate, xPRCUOM as yPRCUOM from x where xPRCUOM <> '99') Select distinct a.* from ec30data.ITMPRC a join y on ITMNUM = yItemNo and DTEEFF = yMyDate and PRCUOM <> '99'; Thanks again, cheers, Jake. On 11/3/06, Jake M <jakeroc@xxxxxxxxx> wrote:
Birgitta, I appreciate your assistance. I am a tad bewildered though. This the query that I am using and I am not grouping by prcuom but still getting both the uom's. I think the reason is because there are two numbers coming out of price field and two 'CS' and '99' coming out of uom field. Hmm...Any thoughts? With x as (Select ITMNUM as xItemNo, Max(DTEEFF) as xMyDate from ec30data.ITMPRC where IBBRCH = ' ' and PRCUOM = 'CS' Group By ITMNUM) Select a.* from ec30data.ITMPRC a join x on ITMNUM = xItemNo and DTEEFF = xMyDate; Thanks again, cheers. Jake. On 11/3/06, HauserBirgitta <Hauser@xxxxxxxxxxxxxxx> wrote: > > Hi Jake, > > just have a look at the example I changed. I not only added the where > condition, but also removed the case statement and the column PRCUOM > from > the CTE. > You had a group by clause on ItemNo and PRCUOM. In this way you'll get > two > rows, one for each PRCUOM. > > Mit freunlichen Grüßen / Best regards > > Birgitta Hauser > > "Shoot for the moon, even if you miss, you'll land among the stars." > (Les > Brown) > "If you think education is expensive, try ignorance." (Derek Bok) > > > > > ----- Original Message ----- > From: "Jake M" <jakeroc@xxxxxxxxx> > To: "RPG programming on the AS400 / iSeries" < rpg400-l@xxxxxxxxxxxx> > Sent: Friday, November 03, 2006 20:48 > Subject: Re: Can this be done in SQL instead of traditional 'CHAIN'? > > > Birgitta, > That is exactly what I thought and also tried adding PRCUOM = 'CS' but > doing > this is still showing item 'b' two times with PRCUOM as '99' in one > record > and 'CS' in one record. Am I missing something here? Thanks again for > your > assistance. > > cheers, > > Jake. > > On 11/3/06, HauserBirgitta < Hauser@xxxxxxxxxxxxxxx> wrote: > > > > Hi, > > > > >>I have another field named 'PRCUOM' now an item may have 'CS' or > '99' > > what > > >>if I want to select only items with 'CS'...So, for item 'b', I want > to > > see > > >>only one record... > > > > ... just add a where condition to the CTE: > > With x as (Select ITMNUM as xItemNo, Max(DTEEFF) as xMyDate, > > from ec30data.ITMPRC > > where IBBRCH = ' ' > > and PRCUCOM = 'CS' > > Group By ITMNUM) > > Select a.* > > from ec30data.ITMPRC a join x > > on ITMNUM = xItemNo and DTEEFF = xMyDate and PRCUOM = xprcuom; > > > > Just an other comment: > > A Select-Statement is not restricted to a single CTE, i.e. you can > define > > as > > much as you want (there may be a restriction at 256? CTEs). > > And it's even possible to use a CTE in an other CTE. > > In the following example the ItemNo with the highest Sales (including > the > > total sales) will be determined. > > Example: > > with a as (select ItemNo as aItemNo, sum(Sales) as SalesPerItem > > from Sales > > group by ItemNo), > > b as (Select Max(SalesPerItem) as MaxSales from a) > > select a.* > > from a join b on SalesPerItem = MaxSales ; > > > > Mit freunlichen Grüßen / Best regards > > > > Birgitta Hauser > > > > "Shoot for the moon, even if you miss, you'll land among the stars." > (Les > > Brown) > > "If you think education is expensive, try ignorance." (Derek Bok) > > > > > > > > > > ----- Original Message ----- > > From: "Jake M" <jakeroc@xxxxxxxxx> > > To: "RPG programming on the AS400 / iSeries" < rpg400-l@xxxxxxxxxxxx> > > Sent: Friday, November 03, 2006 18:45 > > Subject: Re: Can this be done in SQL instead of traditional 'CHAIN'? > > > > > > I appreciate and thank you all for all the suggestions. > > Birgitta, > > Thanks a bunch for the CTE suggestion. It helped out a great deal. I > am > > almost through but for a small problem. What if I want to throw in > another > > parameter? > > > > I have another field named 'PRCUOM' now an item may have 'CS' or '99' > what > > if I want to select only items with 'CS'...So, for item 'b', I want to > see > > only one record... > > b '' 20060712 59.46 > > > > This is where I am at.. > > > > With x as (Select ITMNUM as xItemNo, Max(DTEEFF) as xMyDate, PRCUOM > as > > xprcuom, > > CASE WHEN (PRCUOM = 'CS' or PRCUOM = 'EA') > > THEN PRCUOM = 'CS' > > ELSE PRCUOM > > END > > from ec30data.ITMPRC > > where IBBRCH = ' ' > > Group By ITMNUM, PRCUOM) > > Select a.* > > from ec30data.ITMPRC a join x on ITMNUM = xItemNo > > and DTEEFF = xMyDate and PRCUOM = xprcuom; > > > > data > > === > > item branch dateeff price prcuom > > a 1 20060108 15.18 bg > > a 3 20060108 38.16 cs > > a 2 20060509 48.15 cs > > a 20061015 39.12 99 > > > > b 4 20060915 48.36 di > > b 3 20060101 99.12 lm > > b 20060712 59.46 cs > > b 2 20051225 74.69 cs > > b 20060712 18.45 99 > > > > c 1 20050815 10.15 cs > > c 20061012 19.04 99 > > c 3 20061030 18.77 cs > > > > d 6 20051215 0.79 di > > d 7 20061010 19.65 pr > > d 20061015 44.22 im > > d 2 20050512 33.98 pr > > > > once again, thanks for all the suggestions. I appciate the help. > > > > cheers, > > > > Jake. > > > > > > > > > > > > > > On 11/3/06, HauserBirgitta < Hauser@xxxxxxxxxxxxxxx> wrote: > > > > > > Hi, > > > > > > instead of a sub-subselect also a common table expression (CTE). A > CTE > > is > > > nothing else than a temporary view, that is only valid for the > > > select-statement where specified. IMHO CTEs are more readeable than > > nested > > > subselects. > > > > > > With x as (Select ItemNo as xItemNo, Max(MyDate) as xMyDate > > > from MyTable > > > where branch = ' ' > > > Group By ItemNo) > > > Select a.* > > > from MyTable a join x on ItemNo = xItemNo > > > and MyDate = xMyDate; > > > > > > > > > Mit freunlichen Grüßen / Best regards > > > > > > Birgitta Hauser > > > > > > "Shoot for the moon, even if you miss, you'll land among the stars." > > > (Les > > > Brown) > > > "If you think education is expensive, try ignorance." (Derek Bok) > > > > > > > > > > > > > > > ----- Original Message ----- > > > From: "David Keck" < DavidKeck@xxxxxxxx> > > > To: "RPG programming on the AS400 / iSeries" <rpg400-l@xxxxxxxxxxxx> > > > Sent: Thursday, November 02, 2006 23:55 > > > Subject: Re: Can this be done in SQL instead of traditional 'CHAIN'? > > > > > > > > > > > > You could try working in something along the lines of the code shown > > > below. > > > Maybe better is to build a work file (in advance of running your > > > application) which has only one price record per item. BTW, your > boss > > > might be able to code this application rather quickly using "CHAIN" > ;-) > > > > > > select p.price > > > from Item i left join ItemPrice p > > > on i.item = p.item > > > where p.branch = ' ' and > > > p.date = (select max( x.date) from ItemPrice x > > > where x.item = i.item and > > > x.branch = ' ') > > > > > > David Keck > > > NBTY, Inc > > > Phone (631) 200-5809 > > > DavidKeck@xxxxxxxx > > > > > > > > > > > > Hello All; > > > I am working on an embedded SQL code instead of using the > traditional > > > 'CHAIN' suggested by my boss. Now, I am stuck and was wondering if > > anybody > > > could point me in the right direction. I am dabbling in quite a few > > files > > > but I will try and keep it very relevant. Firstly, here is a little > > subset > > > of the data. > > > > > > item branch dateeff price a 1 20060108 15.18 a 3 20060108 38.16 > a > > 2 > > > 20060509 48.15 a > > > 20061015 39.12 b 4 20060915 48.36 b 3 20060101 99.12 b > > > 20060710 59.46 b 2 20051225 74.69 b > > > 20051012 18.45 c 1 20050815 10.15 c > > > 20061012 19.04 c 3 20061030 18.77 d 6 20051215 0.79 d 7 20061010 > > 19.65 > > > d > > > 20061015 44.22 d 2 20050512 33.98 > > > Now, here is my difficulty. I am going to join the item later on > with my > > > grand query. From this file this is what I need... > > > If I pick up an item 'a' I want my query to give the price with the > > latest > > > date in 'dateeff' and the 'branch' needs to be blank. So, for item > 'a' > > it > > > would be '39.12'. That is too trivial. Now, if I want the pricing > for > > 'b' > > > the latest date is 20060915 but the branch is not blank so I need to > > look > > > the next latest date and see if the branch associated with that date > is > > > blank and if it then I need to pick that pricing. So, it is 59.46. > For > > > item > > > 'c', it is 19.04. For item 'd' it is 44.22. > > > > > > I hope I have made sense out of my problem. I have been working on > this > > > for > > > the past four hours but to no avail. This is my whole query till > > > now....(if > > > anybody wants to make sense out of it..:-0)) > > > > > > (My apologies for non-formatted SQL)... > > > > > > select itmmst.itmnum, itmdsc, unit, vendor, itmlgm, > > REPLACE(substr(nccxpp, > > > 9, 50), '@', ':') AS $$PATH40, desc, shortdescription, price, dteeff > > from > > > (select max(dteeff) as max_date, itmnum from ec30data.itmprc group > by > > > itmnum) maxresults, ec30data.itmmst itmmst left outer join > > > ec30data.bwixrfbwixrf on > > > itmmst.itmlgm = bwixrf.nccxcn left outer join testing.catviewcatview on > > > itmmst.itmnum = catview.itmnum left outer join ec30data.itmprcitmprc on > > > itmmst.itmnum = itmprc.itmnum WHERE (maxresults.max_date = > itmprc.dteeff > > > and > > > itmprc.itmnum = maxresults.itmnum ) > > > > > > Any help in this matter would be much appreciated. > > > > > > Thanks in advance. > > > > > > cheers, > > > > > > Jake. > > > -- > > > This is the RPG programming on the AS400 / iSeries (RPG400-L) > mailing > > list > > > To post a message email: RPG400-L@xxxxxxxxxxxx > > > To subscribe, unsubscribe, or change list options, > > > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > > > or email: RPG400-L-request@xxxxxxxxxxxx > > > Before posting, please take a moment to review the archives > > > at http://archive.midrange.com/rpg400-l. > > > > > > > > > > > > > > > > > > > > > -------------------------------------------------------------------------------- > > > > > > > > > > > -- > > > > This is the RPG programming on the AS400 / iSeries (RPG400-L) > mailing > > > list > > > > To post a message email: RPG400-L@xxxxxxxxxxxx > > > > To subscribe, unsubscribe, or change list options, > > > > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > > > > or email: RPG400-L-request@xxxxxxxxxxxx > > > > Before posting, please take a moment to review the archives > > > > at http://archive.midrange.com/rpg400-l. > > > > > > > > > > > > > > > > > -- > > > This is the RPG programming on the AS400 / iSeries (RPG400-L) > mailing > > list > > > To post a message email: RPG400-L@xxxxxxxxxxxx > > > To subscribe, unsubscribe, or change list options, > > > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > > > or email: RPG400-L-request@xxxxxxxxxxxx > > > Before posting, please take a moment to review the archives > > > at http://archive.midrange.com/rpg400-l. > > > > > > > > -- > > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing > list > > To post a message email: RPG400-L@xxxxxxxxxxxx > > To subscribe, unsubscribe, or change list options, > > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > > or email: RPG400-L-request@xxxxxxxxxxxx > > Before posting, please take a moment to review the archives > > at http://archive.midrange.com/rpg400-l. > > > > > > -- > > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing > list > > To post a message email: RPG400-L@xxxxxxxxxxxx > > To subscribe, unsubscribe, or change list options, > > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > > or email: RPG400-L-request@xxxxxxxxxxxx > > Before posting, please take a moment to review the archives > > at http://archive.midrange.com/rpg400-l. > > > > > -- > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing > list > To post a message email: RPG400-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > or email: RPG400-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l. > > > > > -- > This is the RPG programming on the AS400 / iSeries (RPG400-L) mailing > list > To post a message email: RPG400-L@xxxxxxxxxxxx > To subscribe, unsubscribe, or change list options, > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l > or email: RPG400-L-request@xxxxxxxxxxxx > Before posting, please take a moment to review the archives > at http://archive.midrange.com/rpg400-l . > >
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.