Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

SQL Server 2019 – Ordering in sub select

In my database I have a Tracking Codes table as a child of a single Employment table. Along with other data, I am trying to return all of the Tracking Codes in a comma separated string so there will only be one row per Employment. However, I want this string sorted by the Tracking Code Order table that will give a numerical order depending on the Tracking Code.

My Tracking Code Tables look like this:

TrackingCodeOrder Table

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Name Order
A 1
B 2
C 3

TrackingCode Table

ID Code
123 A
321 B
159 C

The current code I am using is:

(
    select top(1) string_agg(tc.TrackingCode, ',') 
    from TrackingCode as tc 
    left join TrackingCodeOrder tco on tco.Name = tc.TrackingCode
    where etc.Employment_id = e.id
    group by tco.Order
    order by tco.Order asc
) as 'TrackingCodeId'

from employee e

When I attempt to do it with this code, it runs, but I do not get all of my tracking codes returned. Some have 2 but will only return 1, others will have 9 but only return 4. If I remove the top(1), group by, and order by, I will see all the codes returned correctly, but not in the expected order. I have also attempted using top 100 percent. But the sub select will return more than one item.

Is there another way that I can sort in this sub select?

>Solution :

Provided your database compatibility is set to an appropriate level, then you need to use the specific order clause for STRING_AGG

STRING_AGG(tc.TrackingCode, ',') WITHIN GROUP (ORDER BY tco.Order ASC)

Read more at the official MS docs for SQL, STRING_AGG() function:
https://learn.microsoft.com/en-us/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver16

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading