You can do this with dynamic pivots, although your column names become the user names, that's not a big deal if you're handling the output in c#; you can just iterate over a field count. One catch would be if you have two users with identical names, they would only show once.
Here's a great SO post on dynamic pivots.
Using this method I came up with the sample code below. (Note the line SET @loanID = 1
- change between 1 and 2 to test outputs)
IF OBJECT_ID('TEMPDB..#LOANS') IS NOT NULL
DROP TABLE #LOANS
CREATE TABLE #LOANS (LOANID INT, USERNAME NVARCHAR(100))
INSERT INTO #LOANS
SELECT 1, 'Neal' UNION ALL
SELECT 1, 'Bob' UNION ALL
SELECT 2, 'Sarah' UNION ALL
SELECT 2, 'John' UNION ALL
SELECT 2, 'Elsa' UNION ALL
SELECT 2, 'Jennifer' UNION ALL
SELECT 2, 'Dave'
DECLARE @cols AS NVARCHAR(MAX), @y AS INT, @sql AS NVARCHAR(MAX), @loanID INT
-- set an id here...
SET @loanID = 1
SET @cols = STUFF(
(SELECT N',' + QUOTENAME(y) AS [text()]
FROM (SELECT DISTINCT USERNAME AS y
FROM #LOANS
WHERE LOANID=@loanID) AS Y
ORDER BY y
FOR XML PATH('')),
1, 1, N'');
SET @sql = N'SELECT *
FROM (SELECT LOANID, USERNAME
FROM #LOANS
WHERE LOANID='+CAST(@loanID AS NVARCHAR)+') AS D
PIVOT(MIN(USERNAME) FOR USERNAME IN(' + @cols + N')) AS P;';
EXEC sp_executesql @sql;
GO
If you had a userID, your results could look like this instead:
IF OBJECT_ID('TEMPDB..#LOANS') IS NOT NULL
DROP TABLE #LOANS
CREATE TABLE #LOANS (LOANID INT, USERNAME NVARCHAR(100), USERID INT)
INSERT INTO #LOANS
SELECT 1, 'Neal', 1 UNION ALL
SELECT 1, 'Bob', 2 UNION ALL
SELECT 2, 'Sarah', 3 UNION ALL
SELECT 2, 'John', 4 UNION ALL
SELECT 2, 'Elsa', 5 UNION ALL
SELECT 2, 'Jennifer', 6 UNION ALL
SELECT 2, 'Dave', 7
DECLARE @cols AS NVARCHAR(MAX), @y AS INT, @sql AS NVARCHAR(MAX), @loanID INT
-- set an id here...
SET @loanID = 1
SET @cols = STUFF(
(SELECT N',' + QUOTENAME(y) AS [text()]
FROM (SELECT DISTINCT USERID AS y
FROM #LOANS
WHERE LOANID=@loanID) AS Y
ORDER BY y
FOR XML PATH('')),
1, 1, N'');
SET @sql = N'SELECT *
FROM (SELECT LOANID, USERNAME, USERID
FROM #LOANS
WHERE LOANID='+CAST(@loanID AS NVARCHAR)+') AS D
PIVOT(MIN(USERNAME) FOR USERID IN(' + @cols + N')) AS P;';
EXEC sp_executesql @sql;
GO