SQL Server Performance

Order By Clause

Discussion in 'General Developer Questions' started by patel_mayur, Aug 1, 2006.

  1. patel_mayur New Member

    Why its not giving me Error ?

    Select 'a','b' Order By 2+2
  2. FrankKalis Moderator

    From BOL:

    quote:
    order_by_expression

    Specifies a column on which to sort. A sort column can be specified as a name or column alias (which can be qualified by the table or view name), an expression, or a nonnegative integer representing the position of the name, alias, or expression in select list.

    --
    Frank Kalis
    Microsoft SQL Server MVP
    Webmaster:http://www.insidesql.de
    Heute schon gebloggt?http://www.insidesql.de/blogs
  3. patel_mayur New Member

    Thanks Frank,

    Select 'a','b' Order By 4 -- will give error that i can understand
    But same time
    Select 'a','b' Order By 2+2 -- why its not giving me error ?

    How sql will treat the second statement ?
  4. Adriaan New Member

    There will not be a syntax error on this exact statement:
    SELECT 'a', 'b' ORDER BY 2+2

    However this ...
    SELECT 'a', 'b' ORDER BY 4
    ... throws the error "The ORDER BY position number 4 is out of range of the number of items in the select list." There are just two items in the column list, so that is an obvious problem.

    ORDER BY 2 + 2 takes the value of the expression, which is 4 on all columns - so this has no effect on the ordering.

    You can use position numbers instead of column names after ORDER BY, but you cannot use any type of expression to provide a position number.

    You're building a query dynamically, I presume?
  5. FrankKalis Moderator

    I think this is kind of a quirk in SQL Server. I'm not entirely sure about what SQL Server does behind the scenes, but I guess ORDER BY 2+2 is interpreted as a valid expression that doesn't yield anything at the same time. It can't be applied to neither the SELECT list nor the ORDER BY list, so it doesn't do anything. I guess it will become clearer when we extend your example:<br /><pre id="code"><font face="courier" size="2" id="code"><br />DECLARE @table table(c1 CHAR, c2 CHAR)<br />INSERT INTO @table SELECT 'a','z' <br /> UNION ALL SELECT 'b', 'b'<br /> UNION ALL SELECT 'c', 'd'<br /><br />SELECT *<br /> FROM @table<br /> ORDER BY 2+100<br /><br />c1 c2 <br />---- ---- <br />a z<br />b b<br />c d<br /><br />(3 row(s) affected)<br /></font id="code"></pre id="code"><br />Now the sum of 2+100 is clearly out-of-range, so SQL Server doesn't seem to calculate the sum before evaluating the expression. Actually it doesn't do any sorting at all, so I guess that as long as the expression is valid, but can't be applied to the statement it is ignored. <br /><br />But I think this makes up for a nice question in the private MVP newsgroup. Thanks for this! [<img src='/community/emoticons/emotion-1.gif' alt=':)' />]<br /><br /><br />--<br />Frank Kalis<br />Microsoft SQL Server MVP<br />Webmaster:<a target="_blank" href=http://www.insidesql.de>http://www.insidesql.de</a><br />Heute schon gebloggt?<a target="_blank" href=http://www.insidesql.de/blogs>http://www.insidesql.de/blogs</a>
  6. FrankKalis Moderator

    quote:Originally posted by Adriaan

    There will not be a syntax error on this exact statement:
    SELECT 'a', 'b' ORDER BY 2+2

    However this ...
    SELECT 'a', 'b' ORDER BY 4
    ... throws the error "The ORDER BY position number 4 is out of range of the number of items in the select list." There are just two items in the column list, so that is an obvious problem.

    ORDER BY 2 + 2 takes the value of the expression, which is 4 on all columns - so this has no effect on the ordering.

    You can use position numbers instead of column names after ORDER BY, but you cannot use any type of expression to provide a position number.
    Looks like you're right.


    SELECT *
    FROM @table
    ORDER BY 1+1

    c1 c2
    ---- ----
    a z
    b b
    c d

    (3 row(s) affected)

    doesn't have any effect on the sorting, although one might guess that a sort on column 2 should eventually happen.

    --
    Frank Kalis
    Microsoft SQL Server MVP
    Webmaster:http://www.insidesql.de
    Heute schon gebloggt?http://www.insidesql.de/blogs
  7. patel_mayur New Member

    Thx Adriaan for making things clearer !!!
  8. Adriaan New Member

    Hm, it gets even stranger ...
    declare @orderby varchar(100)

    set @orderby = 'c1'

    select * from @table
    order by @orderby
    ... and guess what the error message is:

    The SELECT item identified by the ORDER BY number 1 contains a variable as part of the expression identifying a column position. Variables are only allowed when ordering by an expression referencing a column name.

    Looks like you can only use a variable in a CASE construct:
    ORDER BY CASE @orderby WHEN 'a' THEN c2 ELSE c1 END
    ... but here you can't use position numbers.
  9. FrankKalis Moderator

  10. FrankKalis Moderator

    ...and another weirdness.


    DECLARE @a INT, @b INT

    SELECT @a = 1, @b = 1

    SELECT *
    FROM @table
    ORDER BY CASE WHEN @a = 1 THEN @b ELSE c2 END

    c1 c2
    ---- ----
    a z
    b b
    c d

    (3 row(s) affected)

    while


    SELECT @a = 0, @b = 1

    SELECT *
    FROM @table
    ORDER BY CASE WHEN @a = 1 THEN @b ELSE 2 END

    Server: Msg 1008, Level 15, State 1, Line 12
    The SELECT item identified by the ORDER BY number 1 contains a variable as part ...
    Same error when you do a


    SELECT @a = 1, @b = 1

    SELECT *
    FROM @table
    ORDER BY CASE WHEN @a = 1 THEN @b ELSE 2 END


    --
    Frank Kalis
    Microsoft SQL Server MVP
    Webmaster:http://www.insidesql.de
    Heute schon gebloggt?http://www.insidesql.de/blogs
  11. patel_mayur New Member

    I know that its not logical but still i am curious to know whats going inside SQL

    I have used column name in true part and an integer in false part of case statement.

    Case-1
    ------
    Declare @orderby char(1)
    SET @orderby = 'a'
    DECLARE @table table(c1 CHAR(2), c2 CHAR)
    Insert Into @table Values ( '3' , 'z')
    Insert Into @table Values ( '1' , 'a')
    Insert Into @table Values ( '10' , 'p')
    Select * From @table order by case @orderby When 'a' then c1 else 2 end


    Case-2
    ------
    Declare @orderby char(1)
    SET @orderby = 'a'
    DECLARE @table1 table(c1 CHAR(2), c2 CHAR)
    Insert Into @table1 Values ( 'a' , 'z')
    Insert Into @table1 Values ( 'z' , 'a')
    Insert Into @table1 Values ( 'd' , 'p')
    Select * From @table1 order by case @orderby When 'a' then c1 else 2 end

    Case-1
    ------
    Executed successfully with ascending order of column c1 considered the value of c1 as integer ?

    Case-2
    ------
    Syntax error converting the varchar value 'a ' to a column of data type int.

  12. Adriaan New Member

    Sorry if we've been confusing you - but you cannot mix-and-match 'column positions' and 'column names' in ORDER BYs.

    You can use 'column positions' only in the standard ORDER BY 1, 2, 3 syntax - with ASC or DESC if necessary.

    As soon as you get into expressions, you must use column names - the 'numbers' would be interpreted as constant values, with no effect on the sorting.

    The error message on case-2 explains that under case-1 the numbers from the CHAR type column were being silently converted to INT to match the numeric constant value in the ORDER BY. This conversion obviously fails for the alphabetic characters that you have in case-2.

    That is another issue with expressions in ORDER BY - the various results must all match a single data type, otherwise you get these errors.
  13. Roji. P. Thomas New Member


    Well, you have two options.

    ORDER BY an Expression Or ORDER By an Ordinal Position

    When you say

    ORDER BY 1

    SQL Server Orders the output by the ordinal position 1

    and when you say

    ORDER BY 1 * 1

    SQL Server ORDER BY the calue 1.

    Behind the scenes SQL server evaluates the expression for each row and add that to the resultset( But not returned to the client)

    For example if you try

    SELECT * FROM ORDERS
    ORDER BY NEWID()

    NewID will be evaluated and the result will be sorted in the Order of the generated newID for each row.

    Since CASE is an Expression, you cannot specify ORDINAL Position Inside a Case Statement.






    Roji. P. Thomas
    http://toponewithties.blogspot.com
  14. Adriaan New Member

    Well, you can ORDER BY NEWID(). Just that that doesn't carry any meaning - unless you're querying a derived table that is ordered in itself.
  15. Roji. P. Thomas New Member

    quote:Originally posted by Adriaan
    Well, you can ORDER BY NEWID(). Just that that doesn't carry any meaning

    The meaning I wanted to convey is that the expression will be evaluated for each row as a pseudo column (virtual column) and the result will be ordered based on this column.

    eg.


    SELECT * FROM Orders
    ORDER BY OrderID * -1


    SELECT OrderID * -1, * FROM Orders
    ORDER BY 1


    quote:[
    - unless you're querying a derived table that is ordered in itself.

    You cannot specify an ORDER BY in a derived table unless TOP is also used.

    Roji. P. Thomas
    http://toponewithties.blogspot.com
  16. Adriaan New Member

    TOP 100 PERCENT will do when ordering derived tables (indeed they should remove that silly requirement).

    NEWID() is a fake identity value, and does not imply that the rows have been ordered by primary key or clustered index.

    This is an old issue that keeps coming up, where people assume that data returned by a query without an ORDER BY clause is always ordered by PK or clustered index. It just isn't. It may happen to be ordered like that, but it doesn't have to. If you need data in a specific order, you must use ORDER BY.
  17. mmarovic Active Member

  18. Roji. P. Thomas New Member

    quote:Originally posted by Adriaan

    TOP 100 PERCENT will do when ordering derived tables (indeed they should remove that silly requirement).
    Just another myth. The following query

    SELECT * FROM
    (SELECT TOP 100 PERCENT * FROM Orders ORDER BY OrderId)X

    IS NOT GUARANTEED to return the rows in the Order of OrderID. In your own words, If you need data in a specific order, you must use ORDER BY (In the outermost query)

    quote:
    NEWID() is a fake identity value, and does not imply that the rows have been ordered by primary key or clustered index.
    NEWID() has nothing to do with IDENTITY or PRIMARY KEY or CLUSTERED INDEX. It is just a unique identifier and there is NO Guarantee that the generated NewIDs will be in an incremental order as IDENTITY.

    Here is a repro.

    CREATE TABLE #Test(id int IDENTITY(1,1), uid uniqueidentifier default newID())

    INSERT INTO #Test DEFAULT VALUES
    INSERT INTO #Test DEFAULT VALUES
    INSERT INTO #Test DEFAULT VALUES
    INSERT INTO #Test DEFAULT VALUES

    SELECT * FROM #Test Order BY 1
    SELECT * FROM #Test Order BY 2

    DROP TABLE #Test

    quote:
    This is an old issue that keeps coming up, where people assume that data returned by a query without an ORDER BY clause is always ordered by PK or clustered index. It just isn't. It may happen to be ordered like that, but it doesn't have to. If you need data in a specific order, you must use ORDER BY.
    This is undisputable and I never implied otherwise.

    Roji. P. Thomas
    http://toponewithties.blogspot.com
  19. FrankKalis Moderator

    quote:Originally posted by Roji. P. Thomas


    quote:Originally posted by Adriaan

    TOP 100 PERCENT will do when ordering derived tables (indeed they should remove that silly requirement).
    Just another myth. The following query

    SELECT * FROM
    (SELECT TOP 100 PERCENT * FROM Orders ORDER BY OrderId)X

    IS NOT GUARANTEED to return the rows in the Order of OrderID. In your own words, If you need data in a specific order, you must use ORDER BY (In the outermost query)


    No, it wasn't a myth. <vbg>
    It was implementation-defined in SQL Server 2000 (and probably below, I don't know exactly). It just happened to be the algorithm used by MS that such a query seems to produce a "properly" ordered resultset. And it seems as though this algorithm has changed in SQL Server 2005. I've already seen many people "complaining" about that new feature. Well, unfortunately those people relied on a not guaranteed feature. Since the SQL 92 standard it is official, that the ONLY GUARANTEED WAY to get a sorting that you expect is to specify the ORDER BY clause. ANYTHING else is nothing but implementation-defined and subject to change at MS will.

    --
    Frank Kalis
    Microsoft SQL Server MVP
    Webmaster:http://www.insidesql.de
    Heute schon gebloggt?http://www.insidesql.de/blogs
  20. Roji. P. Thomas New Member

    <quote>
    No, it wasn't a myth. <vbg>
    It was implementation-defined in SQL Server 2000
    </quote>

    Here is a repro where it fails in 2000

    CREATE TABLE #Temp (a iNT PRIMARY KEY)
    INSERT INTO #Temp VALUES (1)
    INSERT INTO #Temp VALUES (2)
    INSERT INTO #Temp VALUES (3)

    select * from #Temp

    select * from (
    select top 1 a
    from #Temp
    order by a desc
    union all
    select TOP 100 PERCENT 0 as a
    order by 1
    ) dt


    DROP TABLE #Temp

    Roji. P. Thomas
    http://toponewithties.blogspot.com
  21. FrankKalis Moderator

    Okay, I should have mentioned that those questions I've seen haven't mentioned such "complicated" queries. Mostly they were like SELET something from a view that couldn't be changed as the view is part of some third-party app. [<img src='/community/emoticons/emotion-1.gif' alt=':)' />]<br /><br />--<br />Frank Kalis<br />Microsoft SQL Server MVP<br />Webmaster:<a target="_blank" href=http://www.insidesql.de>http://www.insidesql.de</a><br />Heute schon gebloggt?<a target="_blank" href=http://www.insidesql.de/blogs>http://www.insidesql.de/blogs</a>
  22. Adriaan New Member

    quote:Originally posted by Roji. P. Thomas


    quote:Originally posted by Adriaan

    TOP 100 PERCENT will do when ordering derived tables (indeed they should remove that silly requirement).
    Just another myth. The following query

    SELECT * FROM
    (SELECT TOP 100 PERCENT * FROM Orders ORDER BY OrderId)X

    IS NOT GUARANTEED to return the rows in the Order of OrderID. In your own words, If you need data in a specific order, you must use ORDER BY (In the outermost query)
    Oops, my mistake. That's what you get from discussing two items in one post ...
  23. FrankKalis Moderator

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />Oops, my mistake. That's what you get from discussing two items in one post ...<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />Next argument would be that men are incapable of doing two things simultanously. According to what wives usually say, of course...[<img src='/community/emoticons/emotion-4.gif' alt=':p' />]<br /><br />--<br />Frank Kalis<br />Microsoft SQL Server MVP<br />Webmaster:<a target="_blank" href=http://www.insidesql.de>http://www.insidesql.de</a><br />Heute schon gebloggt?<a target="_blank" href=http://www.insidesql.de/blogs>http://www.insidesql.de/blogs</a>
  24. Roji. P. Thomas New Member

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote">Next argument would be that men are incapable of doing two things simultanously. According to what wives usually say, of course...[<img src='/community/emoticons/emotion-4.gif' alt=':p' />]<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />[<img src='/community/emoticons/emotion-1.gif' alt=':)' />] Hope that would conclude it!<br /><br />Roji. P. Thomas<br /<a target="_blank" href=http://toponewithties.blogspot.com>http://toponewithties.blogspot.com</a><br />
  25. Adriaan New Member

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><i>Originally posted by Roji. P. Thomas</i><br /><br /><blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote">Next argument would be that men are incapable of doing two things simultanously. According to what wives usually say, of course...[<img src='/community/emoticons/emotion-4.gif' alt=':p' />]<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />[<img src='/community/emoticons/emotion-1.gif' alt=':)' />] Hope that would conclude it!<br /><br />Roji. P. Thomas<br /<a target="_blank" href=http://toponewithties.blogspot.com>http://toponewithties.blogspot.com</a><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote">Not if the wife has any say in the matter ...[<img src='/community/emoticons/emotion-12.gif' alt=':X' />][xx(][<img src='/community/emoticons/emotion-2.gif' alt=':D' />]
  26. Roji. P. Thomas New Member

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />Not if the wife has any say in the matter ...[<img src='/community/emoticons/emotion-12.gif' alt=':X' />][xx(][<img src='/community/emoticons/emotion-2.gif' alt=':D' />]<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />The women has the last word in every argument. Everthing men says after that is the beginning of a new argument.<br /><br />Roji. P. Thomas<br /<a target="_blank" href=http://toponewithties.blogspot.com>http://toponewithties.blogspot.com</a><br />
  27. Adriaan New Member

    Well, I'm not a woman either, but I still can't let you have the last say!

    Moderator, please lock this thread - just so I do have the last word ...
  28. mmarovic Active Member

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><i>Originally posted by FrankKalis</i><br /><br />Okay, I should have mentioned that those questions I've seen haven't mentioned such "complicated" queries. Mostly they were like SELET something from a view that couldn't be changed as the view is part of some third-party app. [<img src='/community/emoticons/emotion-1.gif' alt=':)' />]<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />There is another example on 2000 in a thread mentioned. It looks like ordering is correct as long as you don't try to switch from asc to desc or the other way round. Anyway, the moral of the story is to not count on it. After learning about the the issue I updated the article to reflect it.<br /><br />... waiting for Adriaan to have the last word [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<br />
  29. FrankKalis Moderator

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />Moderator, please lock this thread - just so I do have the last word <br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />Apart from hijacking this thread twice, it turns out to be a greate thread. I won't lock it. [<img src='/community/emoticons/emotion-2.gif' alt=':D' />]<br /><br />--<br />Frank Kalis<br />Microsoft SQL Server MVP<br />Webmaster:<a target="_blank" href=http://www.insidesql.de>http://www.insidesql.de</a><br />Heute schon gebloggt?<a target="_blank" href=http://www.insidesql.de/blogs>http://www.insidesql.de/blogs</a>
  30. Adriaan New Member

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote">... waiting for Adriaan to have the last word [<img src='/community/emoticons/emotion-5.gif' alt=';)' />]<hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote">sdfjhsdgergkjhfdgiu<br /><br />That's not a word, is it?<br />
  31. FrankKalis Moderator

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />That's not a word, is it?<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />Gotcha! Clearly these are! [<img src='/community/emoticons/emotion-4.gif' alt=':p' />]<br /><br />--<br />Frank Kalis<br />Microsoft SQL Server MVP<br />Webmaster:<a target="_blank" href=http://www.insidesql.de>http://www.insidesql.de</a><br />Heute schon gebloggt?<a target="_blank" href=http://www.insidesql.de/blogs>http://www.insidesql.de/blogs</a>
  32. Adriaan New Member

    [B)][}<img src='/community/emoticons/emotion-1.gif' alt=':)' />][<img src='/community/emoticons/emotion-6.gif' alt=':(' />][xx(][V]
  33. patel_mayur New Member

    Hey All !!!<br /><br />Its greate discussion indeed. But let me concluded what i have understood.<br />Correct me if i am wrong.<br /><br />1. When we are doing Order By, SQL logically add one column to the resultset <br /> ( which is not appeared to the user ) and based on that column doing sorting.<br /><br />2. We should use either 'columnName' OR 'columnNumber' ( Not the Mixture [B)] ),<br /> If we are using Case Statement in Order By Clause.<br /><br />3. If I m not wrong, we can use expression in Order By Clause too...<br /><br /> eg. Select col1, col2 From Table1 Order By <b>col1+col2</b><br /> BUT<br /> Select col1, col2 From Table1 Order By <b>1+2</b> wont work as first statement.<br /> ( SQL considers 1+2 as <b>constant value</b> and logical column have value '3'<br /> for all the rows in the resultset and thus resulting in data as it is in table )<br /> <br /> I mean, Select col1, col2 From Table1 Order By 'abc' ( string constant )<br /> &<br /> Select col1, col2 From Table1 Order By 1+2 is logically same.<br /><br />Last but not least,i dont want to missed out to say<br /><b>"I AM NOT A WOMAN INDEED"</b> [<img src='/community/emoticons/emotion-4.gif' alt=':p' />][8D][<img src='/community/emoticons/emotion-2.gif' alt=':D' />]<br /><br />Thanks a lot guys!!!<br />
  34. Adriaan New Member

    That sums it up perfectly!
  35. Roji. P. Thomas New Member

    <blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />1. When we are doing Order By, SQL logically add one column to the resultset <br /> ( which is not appeared to the user ) and based on that column doing sorting.<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />ORDERing happens On a cursor after the SELECT generates the resultset (theoretically). Thats why ORDER BY is the only place WHERE you can use an alias you defined in the select list. <br /><br /><blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />2. We should use either 'columnName' OR 'columnNumber' ( Not the Mixture [B)] ),<br /> If we are using Case Statement in Order By Clause.<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br /><br />Use the column name whenever possible. ORDER BY Ordianl Position is a NON STANDARD way.<br /><br />When used with CASE you CANNOT use Ordinal Position, because, CASE Is an expression, not a control statement (as Joe alwaus say), which will evaluate to a single value. <br /><br />The following will give you a conversion error.<br /><br />SELECT *<br />FROM Orders ORDER BY CASE WHEN 1=1 THEN 'Abc' ELSE 1 END<br /><br /><blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />3. If I m not wrong, we can use expression in Order By Clause too...<br /><br /> eg. Select col1, col2 From Table1 Order By <b>col1+col2</b><br /> BUT<br /> Select col1, col2 From Table1 Order By <b>1+2</b> wont work as first statement.<br /> ( SQL considers 1+2 as <b>constant value</b> and logical column have value '3'<br /> for all the rows in the resultset and thus resulting in data as it is in table )<br /> <br /> I mean, Select col1, col2 From Table1 Order By 'abc' ( string constant )<br /> &<br /> Select col1, col2 From Table1 Order By 1+2 is logically same.<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />Right<br /><br /><blockquote id="quote"><font size="1" face="Verdana, Arial, Helvetica" id="quote">quote:<hr height="1" noshade id="quote"><br />Last but not least,i dont want to missed out to say<br /><b>"I AM NOT A WOMAN INDEED"</b> [<img src='/community/emoticons/emotion-4.gif' alt=':p' />][8D][<img src='/community/emoticons/emotion-2.gif' alt=':D' />]<br /><hr height="1" noshade id="quote"></font id="quote"></blockquote id="quote"><br />Point Taken <img src='/community/emoticons/emotion-1.gif' alt=':)' /><br /><br />Roji. P. Thomas<br /<a target="_blank" href=http://toponewithties.blogspot.com>http://toponewithties.blogspot.com</a><br />

Share This Page