Solved

Large SQL Table Need Group and SubGroup

Posted on 2009-04-09
3
715 Views
Last Modified: 2012-08-14
Hello,
I have a table that has 2.5 million records in it and I want to be able to display this data in "groups" on one specific field.  
Assume the field is "Tag" and it is a VARCHAR(50).  
What I want to be able to do is list all the rows grouped by the first character of the TAG.  

However, because there are so many records, I also want to display this data in "pages".

For Example, for all rows that begin with "A", I want to then group by the 2nd character:
AAxxxx- AByyyyy
AC- AD
AD - AE
AF-  AG
Etc.
xxxxxx and yyyyy woudl be the remainder of the FIRST and LAST TAG name in the group.
The result would be a 26 groups under A for each letter of the alphabet.  When someone selects the AA-AB group, I would then load all the Tags that have LEFT(Tag,2) in ('AA','AB')

The table is stored in a MS SQL 2000 database.  Any suggestions would be greatly appreciated.

Thanks
0
Comment
Question by:aspireworks
  • 2
3 Comments
 
LVL 17

Expert Comment

by:k_murli_krishna
ID: 24113429
SELECT tag, <column-list> FROM YourTable WHERE ............. GROUP BY SUBSTRING(tag,1,2), SUBSTRING(tag,3,2), <column-list> ORDER BY .............;
0
 

Author Comment

by:aspireworks
ID: 24117946
Thanks, it seemed to get me going down the right path, but didn't quite give me the results I was looking for.
I was able to come up with this code, but it runs REALLY slow.
Here's my SQL:
SELECT DISTINCT code, 

   (SELECT TOP 1 tag FROM table WHERE  SUBSTRING(tag,1,2) = code and LEN(tag) > 2 ORDER BY tag ASC) -- return 1st TAG in group code

,(SELECT TOP1 tag FROM TABLE WHERE SUBSTRING(tag,1,2) = code and LEN(tag) > 2 ORDER BY tag desc) -- return LAST TAG in group code   

FROM TABLE bb (NOLOCK)

INNER JOIN  

(SELECT DISTINCT SUBSTRING(tag,1,2) AS code FROM TABLE WHERE LEN(tag) > 2) cc

ON SUBSTRING(tag,1,2) = cc.code 

ORDER BY code ASC

Open in new window

0
 
LVL 17

Accepted Solution

by:
k_murli_krishna earned 500 total points
ID: 24121522
Try a simpler version:
SELECT DISTINCT SUBSTRING(tag,1,2),
                             (SELECT TOP 1 tag FROM table WHERE  LEN(tag) > 2 ORDER BY tag ASC) ,
                             (SELECT TOP 1 tag FROM TABLE WHERE LEN(tag) > 2 ORDER BY tag DESC)
FROM TABLE bb
GROUP BY  SUBSTRING(tag,1,2);

You can remove the DISTINCT if it is not necessary.

 


   

0

Featured Post

Zoho SalesIQ

Hassle-free live chat software re-imagined for business growth. 2 users, always free.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Creating and Managing Databases with phpMyAdmin in cPanel.
Never store passwords in plain text or just their hash: it seems a no-brainier, but there are still plenty of people doing that. I present the why and how on this subject, offering my own real life solution that you can implement right away, bringin…
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Viewers will learn how the fundamental information of how to create a table.

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now