I need a little help writing a query. I have this data…
vDir iNumber North 19 North 27 North 29 North 31 South 46 South 49 South 51 South 61
I need to query the data and have an output something like this
vDir iLowNumber iHiNumber North 19 27 North 27 29 North 29 31 South 46 49 South 49 51 South 51 61
The idea here is to select the direction, the LowNum and then the nextNumber. Also when the direction changes to start over. (That’s why I think I need a Union, maybe get the North, then Union the South). Notice too the highest number in each direction doesn’t create a record because there is no higher number. The first set has 8 records, and the query result is only 6.
How can I create a query that will do this? Also this is a 2008 SQL Database so I can use 2008 TSQL. I’m really curious how to do this in SQL. Thanks guys!
Advertisement
Answer
Another possible solution:
SELECT T1.vDir, T1.iNumber AS iLowNumber, T2.iNumber AS iHiNumber FROM My_Table T1 INNER JOIN My_Table T2 ON T2.vDir = T1.vDir AND T2.iNumber > T1.iNumber LEFT OUTER JOIN My_Table T3 ON T3.vDir = T1.vDir AND T3.iNumber > T1.iNumber AND T3.iNumber < T2.iNumber WHERE T3.vDir IS NULL -- If this is NULL it means that no rows exist between T1 and T2