I have a table that consists of a record ID, a group ID (linking 1 or more records into a group) and a hash value for each record. 

    CREATE TABLE HashTable(
        RecordID VARCHAR(255),
        GroupIdentifier VARCHAR(255),
        Hash VARCHAR (255),
        GroupHashList VARCHAR(4000)
    )

(I know this isn't an efficient table, but it's just a temp table for the purposes of this example).

I want to generate a hash for each group, so I thought the simplest way would be to concatenate the hashes of each record in the group. RecordIDs are unique, but what those records relate to are not necessarily unique so the hashes may be duplicates. The point of this is to flag fully duplicate groups ie a group were all records in that group are duplicates of all records in another group. The GUI needs all members of the group to have the same hash if it's to recognise them as a duplicate group.

I'm using STRING_AGG to concatenate the individual hashes of the records in the group, and sorting them by the hash to make sure I get the same string of characters for duplicate groups. I don't actually care what the order of the hashes is, so long as it's the same each time. When I run it as a SELECT query, it works fine and I can see identical strings for duplicate groups. When I take that same SELECT query and put it into an UPDATE query, the ordering seems to get lost.

    SELECT STRING_AGG([Hash],';') WITHIN GROUP (ORDER BY [Hash] ASC) 
    FROM HashTable
    GROUP BY [GroupIdentifier]

This gives the results (for an example pair of duplicate groups):
```none
73F294873462B2BA0E930FD16DCCB7;90E749375DF806CB6E3F5CA48FFA38;E44256CE7CFCB971EB679BAC25A697
73F294873462B2BA0E930FD16DCCB7;90E749375DF806CB6E3F5CA48FFA38;E44256CE7CFCB971EB679BAC25A697
```
When I put that same code into the UPDATE query, it doesn't sort them correctly:

    UPDATE HashTable
    SET GroupHashList = c.HashList
    FROM HashTable
    INNER JOIN (
        SELECT (STRING_AGG([Hash],';') WITHIN GROUP (ORDER BY [Hash] ASC)) AS [HashList],
    	    [GroupIdentifier]
        FROM HashTable
        GROUP BY [GroupIdentifier]) c
    ON c.[GroupIdentifier] = HashTable.[GroupIdentifier]

Results for the same two groups that gets written to the table:
```none
73F294873462B2BA0E930FD16DCCB7;90E749375DF806CB6E3F5CA48FFA38;E44256CE7CFCB971EB679BAC25A697
73F294873462B2BA0E930FD16DCCB7;E44256CE7CFCB971EB679BAC25A697;90E749375DF806CB6E3F5CA48FFA38
```
What am I missing?

What I'm getting the first time is 

    Hash1; Hash2; Hash3
    Hash1; Hash2; Hash3

But when it's in the UPDATE query, I get 

    Hash1; Hash2; Hash3
    Hash1; Hash3; Hash2

The update query is sorted by record ID, although I don't know if that's coincidence. (https://dbfiddle.uk/CPG1-z2l)