Received: from megazone.bigpanda.com (megazone.bigpanda.com [63.150.15.178]) by postgresql.org (Postfix) with ESMTP id B5EDB475E33 for ; Wed, 31 Jul 2002 19:17:03 -0400 (EDT) Received: by megazone.bigpanda.com (Postfix, from userid 1001) id 81A78D5F7; Wed, 31 Jul 2002 16:17:04 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by megazone.bigpanda.com (Postfix) with ESMTP id 633A65C04; Wed, 31 Jul 2002 16:17:04 -0700 (PDT) Date: Wed, 31 Jul 2002 16:17:04 -0700 (PDT) From: Stephan Szabo To: Tom Haddon Cc: Subject: Re: Case Statement In-Reply-To: Message-ID: <20020731160809.M21990-100000@megazone23.bigpanda.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Archive-Number: 200207/463 X-Sequence-Number: 8841 On Wed, 31 Jul 2002, Tom Haddon wrote: > Hi Folks, > > Pretty basic one here. I'm trying to do a SELECT statement that includes a > CASE structure that will be used in the ORDER BY clause, and I want the CASE > structure to evaluate a bunch of criteria and in each case increment its > value by a certain amount: > > SELECT id, description CASE > field1 IS TRUE THEN CASE=CASE+1 > field2 IS TRUE THEN CASE=CASE+2 > END > FROM table > ORDER BY CASE, description; > > Am I misunderstanding what CASE can do here, and if so, how else do I do > what I'm trying to do? I know that that isn't right - any pointers > appreciated. Are you trying to get a 0-3 based on field1 and field2 or some kind of aggregate? The first you can do that with something like case when field1 is true then 1 else 0 end + case when field2 is true then 2 else 0 end I think. (Extend for more columns) Or if you've got like 7-8 columns maybe just make a function that does the work for you for clarity. You'll also need a comma after description and you'll want to alias the case expression and use that in order by or use the position number.