Обсуждение: Re: GROUPING and ORDERING and CONFUSION
Hello, I was hoping somebody might be able to help me do this: I have a table with two fields (num int, name text) num | name ---------------------------------------------- 15 | First Category Heading 1510 | first category subheading 1511 | second category subheading 1560 | spurious category subheading 156010| first spurious category subheading 156011| second spurious category subheading 16 | Second Category Heading 1610 | Second category subheading 161010| Second category subheading subheading and so on... My problem is I want to pull that data out and group it so that it comes out just the way it went in.. So my page can read: 15: First Category Heading1510: first category subheading1511: second category subheading 16: ... and so on.. I thought I could probably group by num on the first two digits and order by asc? but I can't find a way to make that work. Thanks in advance. Tim Johnson
If it was literally the way the data went in, you should be able to order by oid. Alternatively, SELECT * FROM tablename ORDER BY substring (text(num) from 1 for 2); should do it. ---------------------------------------------------------------- Moray.McConnachie@computing-services.oxford.ac.uk ----- Original Message ----- From: "Tim Johnson" <tim@celestialdesign.co.uk> To: <pgsql-sql@postgresql.org> Sent: Thursday, April 20, 2000 2:28 AM Subject: [SQL] Re: GROUPING and ORDERING and CONFUSION > Hello, > > I was hoping somebody might be able to help me do this: I have a table with > two fields (num int, name text) > > num | name > ---------------------------------------------- > 15 | First Category Heading > 1510 | first category subheading > 1511 | second category subheading > 1560 | spurious category subheading > 156010| first spurious category subheading > 156011| second spurious category subheading > 16 | Second Category Heading > 1610 | Second category subheading > 161010| Second category subheading subheading > > and so on... > > My problem is I want to pull that data out and group it so that it comes out > just the way it went in.. So my page can read: > > 15: First Category Heading > 1510: first category subheading > 1511: second category subheading > 16: ... and so on.. > > > > I thought I could probably group by num on the first two digits and order by > asc? but I can't find a way to make that work. > > Thanks in advance. > > > Tim Johnson > >
Hmm, souynds like you want all the ruples returned, right? Then it's not really a GROUP problem, just an ORDER BY one. If all your data follows the example you gave, this should work: reedstrm=# select * from fred order by text(num); num | name --------+---------------------------------------- 15 | First Category Heading 1510 | first category subheading 1511| second category subheading 1560 | spurious category subheading156010 | first spurious category subheading156011| second spurious category subheading 16 | Second Category Heading 1610 | Second category subheading161010| Second category subheading subheading (9 rows) However, I _think_ your deeper question has to do with the indentation part, right? Are you trying to indent based on category level? If you've got some sort of programming language between your output and the SQL, then something like: reedstrm=# select text(num) as num ,length( text(num))/2 as level, name from fred order by text(num); num | level | name --------+-------+----------------------------------------15 | 1 | First Category Heading1510 | 2 | firstcategory subheading1511 | 2 | second category subheading1560 | 2 | spurious category subheading156010| 3 | first spurious category subheading156011 | 3 | second spurious category subheading16 | 1 | Second Category Heading1610 | 2 | Second category subheading161010 | 3 | Second category subheadingsubheading (9 rows) Then use the 'depth' to output the proper indentation level. Ross -- Ross J. Reedstrom, Ph.D., <reedstrm@rice.edu> NSBRI Research Scientist/Programmer Computer and Information Technology Institute Rice University, 6100 S. Main St., Houston, TX 77005 On Thu, Apr 20, 2000 at 02:28:01AM +0100, Tim Johnson wrote: > Hello, > > > My problem is I want to pull that data out and group it so that it comes out > just the way it went in.. So my page can read: > > 15: First Category Heading > 1510: first category subheading > 1511: second category subheading > 16: ... and so on.. > >