0 голосов
спросил от в категории SQL
Ваш лучший метод - разбить данные вверх ( нормализация ) на отдельные таблицы для пользователей и комментарии.
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')
< br>
И оттуда вы можете либо присоединиться к таблицам
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


br> Или вы можете использовать PIVOT , чтобы получить несколько столбцов комментариев
; 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
, который вернет this
UserName  Comment1          Comment2 --------  ---------------   ---------------- Me        My Initial Entry  My Second Entry

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
0 голосов
ответил от
CREATE TABLE #temp( Id INT,Comments NVARCHAR(50), CommentText NVARCHAR(1000)); INSERT INTO #temp (Id,Comments, CommentText) VALUES (1,'Comment1', 'My Initial Entry')       ,(2,'Comment2','My Second Entry')       ,(1,'Comment3','Your third Entry')       ,(1,'Comment4','Your Last Entry'); DECLARE @pivtcols VARCHAR(MAX),@Query NVARCHAR(MAX); SELECT @pivtcols=STUFF((SELECT DISTINCT ','+QUOTENAME(Comments) FROM #temp where ID=1 FOR XML PATH('')),1,1,'');  SET @Query=N'SELECT * FROM #TEMP PIVOT(MAX(CommentText) FOR Comments IN('+@pivtcols+'))As pvt WHERE ID=1';  EXEC(@Query);  DROP TABLE #temp;  --OUTPUT:-  ----------------------------------------------------- Id | Comment1    |      Comment3   |        Comment4 --------------------------------------------------------- 1 My Initial Entry Your third Entry Your Last Entry

Категории

Добро пожаловать на сайт DraftingCode Q&A (ИТ ответы), где вы можете задавать вопросы и получать ответы от других членов сообщества.

Связанных вопросов не найдено

...