X-Original-To: pgsql-sql-postgresql.org@postgresql.org Received: from localhost (mx1.hub.org [200.46.208.251]) by postgresql.org (Postfix) with ESMTP id 6D62F9FB257 for ; Mon, 10 Jul 2006 04:22:54 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.208.251]) (amavisd-new, port 10024) with ESMTP id 13558-09 for ; Mon, 10 Jul 2006 04:22:42 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey- Received: from weatherbeeta.com.au (mail.weatherbeeta.com.au [202.154.127.242]) by postgresql.org (Postfix) with SMTP id AAF589FB251 for ; Mon, 10 Jul 2006 04:22:40 -0300 (ADT) Received: (qmail 25962 invoked from network); 10 Jul 2006 07:22:37 -0000 X-NetworkBox-HamSign: 0101;OUT;wbeetaau1;f48cd69d1cb2e0694bd82413eca1bf56; Received: from mail.weatherbeeta.com.au (HELO wb-email) (172.20.0.2)by network-box.weatherbeeta.com.au with SMTP; 10 Jul 2006 07:22:37 -0000 Received: from it-phil.weatherbeeta.com.au ([172.20.0.155]) by wb-email (602Pro LAN SUITE 2003) id 2d55f414 for pgsql-sql@postgresql.org; Mon, 10 Jul 2006 17:20:29 +1000 From: "Phillip Smith" To: Subject: Re: Select Maths Date: Mon, 10 Jul 2006 17:21:53 +1000 Message-ID: <000001c6a3f1$84cf1ed0$9b0014ac@ITPhil> MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0001_01C6A445.567D9FD0" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.6626 Importance: Normal In-Reply-To: X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869 X-Scanned-By-wbeetaau1: Virus scan performed by network-box X-Scanned-By-wbeetaau1: Scanner file id is wbeetaau1-1152516157.491-25955-000 X-Scanned-By-wbeetaau1: No known viruses found in message (received+scanned in 0.04/0.19 secs) X-Scanned-By-wbeetaau1: Spam-Check-Result: No, hits=0 required=7 tests= autolearn=no version=2.0 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200607/143 X-Sequence-Number: 25717 This is a multi-part message in MIME format. ------=_NextPart_000_0001_01C6A445.567D9FD0 Content-Type: text/plain;charset="us-ascii" Content-Transfer-Encoding: 7bit Beautiful - Works a treat. Thanks Aaron. A follow-on problem now. I have the below column in the select, but I need to validate the value across all 3 rules - I need to assign it to a variable!! Example - my pqty function calculates a value less than the suppliers minimum order qty (and therefore fails the first CASE below), I need to set the column to a new value (stock.purchase_unit) - That's all OK. But I need to check this new value against the remaining 2 CASE's. CASE WHEN pqty(stock.code) < stock.purchase_unit THEN stock.purchase_unit --^^^-- Check that our suggested purchase qty is greater than then suppliers minimum order qty WHEN MOD(pqty(stock.code), stock.box_qty) > 0 THEN stock.box_qty * ROUND(CAST(pqty(stock.code) AS DOUBLE PRECISION) / stock.box_qty) --^^^-- Check that our suggested purchase qty is a multiple of the box qty WHEN pqty(stock.code) < (urate(stock.code) * creditors.review_cycle) THEN urate(stock.code) * creditors.review_cycle --^^^-- Check that our suggested purchase qty is greater than our Usage Rate x Creditor Review Cycle END AS "pqty", Thanks again for all your help guys, -p -----Original Message----- From: aaron.bono@gmail.com [mailto:aaron.bono@gmail.com] On Behalf Of Aaron Bono Sent: Friday, 7 July 2006 18:37 To: Phillip Smith Cc: pgsql-sql@postgresql.org Subject: Re: [SQL] Select Maths On 7/7/06, Phillip Smith wrote: Same SELECT query as before, different area of it. I have a function that calculates the recommended purchase order quantity for a stock item based off various other values and functions: pqty(stock.code) AS "pqty" This needs to be rounded up / down to the nearest multiple of the purchase unit quantity for that product - It's Friday afternoon and my head has refused to help me work out the maths all afternoon! Example: Pqty = 60 Purchase Unit = 25 Pqty needs to be rounded down to 50. I guess I'm also asking if I should do this in the Pqty function or in the SELECT query to optimize the result? select 25 * round(cast(60 as double precision) / 25) *******************Confidentiality and Privilege Notice******************* The material contained in this message is privileged and confidential to the addressee. If you are not the addressee indicated in this message or responsible for delivery of the message to such person, you may not copy or deliver this message to anyone, and you should destroy it and kindly notify the sender by reply email. Information in this message that does not relate to the official business of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta. Weatherbeeta, its employees, contractors or associates shall not be liable for direct, indirect or consequential loss arising from transmission of this message or any attachments ------=_NextPart_000_0001_01C6A445.567D9FD0 Content-Type: text/html;charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Beautiful – Works a treat. = Thanks Aaron.

 

A follow-on problem now… I = have the below column in the select, but I need to validate the value across all = 3 rules –  I need to assign it to a variable!!

 

Example – my pqty function calculates a value less than the suppliers minimum order qty (and = therefore fails the first CASE below), I need to set the column to a new value = (stock.purchase_unit) – That’s all OK. But I need to check this new value against = the remaining 2 CASE’s…

 

<SNIP>

CASE  WHEN pqty(stock.code) < stock.purchase_unit THEN stock.purchase_unit

         &n= bsp;  --^^^-- Check that our suggested purchase qty is greater than then suppliers = minimum order qty

      WHEN MOD(pqty(stock.code), stock.box_qty) > 0 THEN stock.box_qty * = ROUND(CAST(pqty(stock.code) AS DOUBLE PRECISION) / stock.box_qty)

         &n= bsp;  --^^^-- Check that our suggested purchase qty is a multiple of the box = qty

      WHEN pqty(stock.code) < (urate(stock.code) * creditors.review_cycle) THEN = urate(stock.code) * creditors.review_cycle

         &n= bsp;  --^^^-- Check that our suggested purchase qty is greater than our Usage Rate x = Creditor Review Cycle

END AS = "pqty",

<SNIP>

 

Thanks again for all your help = guys,

-p

 

-----Original Message-----
From: = aaron.bono@gmail.com [mailto:aaron.bono@gmail.com] On = Behalf Of Aaron Bono
Sent:
Friday, 7 July 2006 18:37
To: Phillip Smith
Cc: = pgsql-sql@postgresql.org
Subject: Re: [SQL] Select = Maths

 

On 7/7/06, = Phillip Smith <phillips@weatherbeeta.com.au= > wrote:

=

Same SELECT query as before, = different area of it… I have a function that calculates the recommended purchase = order quantity for a stock item based off various other values and = functions:

pqty(stock.code) AS "pqty"

 

This needs to be rounded up / down = to the nearest multiple of the purchase unit quantity for that product = – It's Friday afternoon and my head has refused to help me work out the = maths all afternoon!

 

Example:

     Pqty =3D 60

     Purchase Unit =3D 25

Pqty needs to be rounded down to = 50.

 

I guess I'm also asking if I = should do this in the Pqty function or in the SELECT query to optimize the = result?


select 25 * round(cast(60 as double precision) / 25)

 


*******************Confidentiality and Privilege Notice*******************

The material contained in this message is privileged and confidential to the addressee. If you are not the addressee indicated in this message or responsible for delivery of the message to such person, you may not copy or deliver this message to anyone, and you should destroy it and kindly notify the sender by reply email.

Information in this message that does not relate to the official business of Weatherbeeta must be treated as neither given nor endorsed by Weatherbeeta. Weatherbeeta, its employees, contractors or associates shall not be liable for direct, indirect or consequential loss arising from transmission of this message or any attachments
------=_NextPart_000_0001_01C6A445.567D9FD0--