Подзапрос, получающий родительское добавленное поле - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь создать поле с именем Owner в моей таблице, где вы выбираете поле AddedBy, где parentID равен PostID, пока он только печатает первое поле, а второе всегда пусто.Я делаю подзапрос на запрос.Я пытаюсь получить родительское поле AddedBy

SELECT Level, Sequence, PostID, AddedBy, Title, ParentID, Path_String,
   CASE WHEN ParentID IS NULL THEN
       AddedBy 
   ELSE
       (SELECT AddedBy FROM cte o WHERE o.PostID = ParentID)
   END AS Owner
FROM cte order by Sequence

Я пытаюсь получить количество всех сообщений, связанных с PostID, к которому присоединен ParentID в соединении, но я получаю сообщение об ошибке, поэтому, когда я делаю группу повсе поля я все еще получаю ошибку: - ошибка ниже

SELECT s.Level, s.Sequence, s.PostID, s.AddedBy,  
s.Title, s.ParentID, s.Path_String, 
Owner = COALESCE(o.AddedBy, s.AddedBy), COUNT(r.ParentID)
FROM cte AS s 
LEFT OUTER JOIN cte AS o 
ON s.ParentID = o.PostID 
RIGHT join cte AS r
on s.PostID = r.ParentID
ORDER BY s.Sequence; 

я получаю следующую ошибку:

Msg 8120, Level 16, State 1, Procedure sproc_GetPostsByThread, Line 34
Column 'cte.Level' is invalid in the select list because it is not
contained in either an aggregate function or the GROUP BY clause.

PostID, ParentID, AddedBy, Title, Path_String: - PostID isIdentityColumn Path_String имеет этот формат 1 /, 1/1 /, 1/1/2 и ParentID является целым числом

    Level       Sequence                    PostID      AddedBy    Title     ParentID    Path_String  Owner    Count                                          

1     00000003                          3           kirkdm     test      NULL        3/           kirkdm   1
2     0000000300000005                  5           MikeDM     re: test  3           3/5/         kirkdm   2
3     000000030000000500000008          8           Joelene    re: test  5           3/5/8/       MikeDM   2
3     000000030000000500000009          9           kirkdm     re: test  5           3/5/9/       MikeDM   1
4     00000003000000050000000900000010  10          Crushanin  re: test  9           3/5/9/10/    kirkdm   1

Должно быть это

Level       Sequence                                     PostID      AddedBy      Title     ParentID    Path_String     Owner     Count column here 

1           00000003                                     3           kirkdm       test      NULL        3/              kirkdm
2           0000000300000005                             5           MikeDM       re: test  3           3/5/            kirkdm
3           000000030000000500000008                     8           Joelene      re: test  5           3/5/8/          MikeDM
4           00000003000000050000000800000014             14          Christian    re: test  8           3/5/8/14/       Joelene
4           00000003000000050000000800000015             15          Zeke         re: test  8           3/5/8/15/       Joelene
3           000000030000000500000009                     9           kirkdm       re: test  5           3/5/9/          MikeDM
4           00000003000000050000000900000010             10          Crushanin    re: test  9           3/5/9/10/       kirkdm
5           0000000300000005000000090000001000000011     11          Tim          re: test  10          3/5/9/10/11/    Crushanin

1 Ответ

2 голосов
/ 26 января 2012
SELECT s.Level, s.Sequence, s.PostID, s.AddedBy, 
   s.Title, s.ParentID, s.Path_String,
   Owner = COALESCE(o.AddedBy, s.AddedBy)
FROM cte AS s
LEFT OUTER JOIN cte AS o
ON s.ParentID = o.PostID
ORDER BY s.Sequence;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...