[AccessD] Query Question

Andy Lacey andy at minstersystems.co.uk
Thu May 1 07:24:07 CDT 2008


You spotted my deliberate error then ;-) 

That's great Gustav. A 3rd option to work on. Not in work now until next
week but then I'll give the 3 options a run-out and see.

Thanks Drew, Stuart and Gustav. Truly great stuff as always.

-- Andy Lacey
http://www.minstersystems.co.uk 

>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com 
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Gustav Brock
>Sent: 01 May 2008 12:06
>To: accessd at databaseadvisors.com
>Subject: Re: [AccessD] Query Question
>
>
>Hi Andy
>
>That's right, I didn't read carefully, sorry. 
>However, to look up a series of values is just as simple as 
>looking up just one, using a filtered Cartesian (multiplying) join:
>
>  SELECT 
>    tblValuesToLookup.Id, 
>    tblValuesToLookup.Var, 
>    tblLookup.Result1, 
>    tblLookup.Result2
>  FROM 
>    tblLookup, 
>    tblValuesToLookup
>  WHERE 
>    (((Val(Nz((Select Max(RangeEnd) From tblLookup As tbl 
>Where tbl.RangeEnd < tblLookup.RangeEnd),0)))<=[Var]) 
>    AND 
>    ((tblLookup.RangeEnd)>[Var]));
>
>will return:
>
>Id	Var	Result1	Result2
>1	7	1500	1700
>2	17	2000	2500
>3	27	2350	2900
>4	13	1500	1700
>
>Note the difference from your sample ...
>
>/gustav
>
>>>> andy at minstersystems.co.uk 01-05-2008 10:57 >>>
>Hi Gustav. Thanks for this but if I understand this right it's 
>designed to return just one value based on an input value 
>passed in as a parameter. My fault entirely if my original 
>question wasn't clear but I need a query which returns the 
>correct lookup value for all records in my Table1. So if my 
>input is, say,
>
>7
>17
>27
>13
>
>My output would be
>
>7	1500	1700
>17	2000	2500
>27	2350	2900
>13	2000	2500
>
>Sorry if I misled you by over-simplifying my question.
>
>-- Andy Lacey
>http://www.minstersystems.co.uk 
>
>
>>-----Original Message-----
>>From: accessd-bounces at databaseadvisors.com
>>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of 
>Gustav Brock
>>Sent: 01 May 2008 08:43
>>To: accessd at databaseadvisors.com 
>>Subject: Re: [AccessD] Query Question
>>
>>
>>Hi Andy
>>
>>This can be done returning all fields with one subquery only.
>>
>>Given tblLookup like:
>>
>>RangeEnd	Result1	Result2
>>15	1500	1700
>>25	2000	2500
>>100	2350	2900
>>
>>the query could be build this way:
>>
>>  PARAMETERS 
>>    Var Long;
>>  SELECT 
>>      Val(Nz((Select Max(RangeEnd) From tblLookup As tbl 
>>      Where tbl.RangeEnd < tblLookup.RangeEnd),0)) AS 
>>    RangeMin, 
>>      tblLookup.RangeEnd AS 
>>    RangeMax, 
>>    Result1, 
>>    Result2
>>  FROM 
>>    tblLookup
>>  WHERE 
>>    (((Val(Nz((Select Max(RangeEnd) From tblLookup As tbl
>>Where tbl.RangeEnd < tblLookup.RangeEnd),0)))<=[Var]) 
>>    AND 
>>    ((tblLookup.RangeEnd)>[Var]));
>>
>>Note that you will only have to specify the max. range (the
>>min. is implicit). For this case it means that you must deal 
>>with a limited upper value, here 100. For an "unlimited" upper 
>>limit, insert some much higher value.
>>
>>/gustav
>>
>>>>> andy at minstersystems.co.uk 30-04-2008 17:30 >>>
>>Hi folks
>>Looking for best solution to a simple problem. It's of the "if
>>var is anything between x and y return this value, if anywhere 
>>between xx and yy return that etc". I'll express it in its 
>>most basic form:
>>
>>Table LKUP has fields
>>[RangeStart], [RangeEnd], [Result1], [Result2] and looks like this
>>
>>0   14.9  1500  1700
>>15  24.9  2000  2500
>>25  99.9  2350  2900
>>
>>([RangeEnd] is probably superfluous but I hope it makes the
>>example clearer)
>>
>>Table1 has (among others) field [LookupValue]
>>
>>I want a query which if [LookupValue] on Table1 is anywhere
>>between 0 and 14.9 returns 1500 and 1700 from Lkup, if it's 
>>between 15 and 24.9 returns 2000 and 2500, and anything from 
>>25 upwards returns 2350 and 2900.
>>
>>My solution is this:
>>SELECT Table1.[LookupValue],Max([Lkup].Result1)
>>,Max([Lkup].Result2) FROM Table1 LEFT JOIN [Lkup] ON 
>>Table1.[LookupValue] >= [Lkup].[RangeStart] GROUP BY 
>>Table1.[LookupValue];
>>
>>Seems to work but because it uses Max it depends on the values
>>in Result1 and Result2 getting larger as the lookups get 
>>larger. If they didn't then the Max would return the wrong 
>>results (I think).
>>
>>Any other, or better, ideas?
>>
>>--
>>Andy Lacey
>>http://www.minstersystems.co.uk
>
>
>
>-- 
>AccessD mailing list
>AccessD at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/accessd
>Website: http://www.databaseadvisors.com
>
>





More information about the AccessD mailing list