MadMyche
Ваш лучший метод будет заключаться в том, чтобы разбить данные (нормализация) в отдельные таблицы для пользователей и комментариев.
DECLARE @Users TABLE (
UserID INT PRIMARY KEY NOT NULL
, UserName VARCHAR(100)
)
DECLARE @Comments TABLE (
CommentID INT PRIMARY KEY NOT NULL
, UserID INT NULL
, CommentTime DATETIME NULL
, CommentSubject NVARCHAR(100) NULL
, CommentText NVARCHAR(1000) NULL
)
INSERT @Users (UserID, UserName)
VALUES (1, 'Me')
, (2, 'You')
INSERT @Comments (CommentID, UserID, CommentTime, CommentSubject, CommentText)
VALUES (1, 1, GetDate(), 'Comment1', 'My Initial Entry')
, (2, 1, GetDate(), 'Comment2','My Second Entry')
, (3, 2, GetDate(), 'Comment1','Your First Entry')
, (4, 2, GetDate(), 'Comment2','Your Last Entry')
И оттуда вы можете либо присоединиться к столам
SELECT u.UserName, c.CommentTime, c.CommentText
FROM @Users u
INNER JOIN @Comments c ON u.UserID = c.UserID
WHERE u.UserID = 1
который возвращается
UserName CommentTime CommentText
-------- ----------- ------------
Me 2018-08-22 Initial Entry
Me 2018-08-22 Second Entry
Или вы могли бы использовать
СТЕРЖЕНЬ чтобы получить несколько столбцов комментариев
; WITH cte AS (
SELECT u.UserID, u.UserName, c.CommentTime, c.CommentText, c.CommentSubject
FROM @Users u
INNER JOIN @Comments c ON u.UserID = c.UserID
)
SELECT UserName, y.Comment1, y.Comment2
FROM cte
PIVOT (
Max(CommentText)
FOR CommentSubject IN ([Comment1], [Comment2] )
) as y
WHERE UserID = 1
который вернет это
UserName Comment1 Comment2
-------- --------------- ----------------
Me My Initial Entry My Second Entry