Ausgeprägte Zeilen auf einer Spalte in mehreren Gewerkschaften

Ich arbeite daran, ein hierarchisches Menü zu build, das auf 4 Tabellen basiert. nach der Forschung die einzige Lösung, die ich mir vorstellen kann, ist, es mit der UNION so weit zu tun, bin ich nah aber trotzdem habe ich nicht das gewünschte Ergebnis.

4 Tabelle, die ich verwende, sind

  1. Page-Tabelle mit PageID als PK (die tatsächliche Seiten für cms enthält)
  2. Artikeltabelle mit PageID als FK (welches Artikel hat)
  3. Artikel Kategorie Tabelle mit PageID als FK (diese Tabelle hat Artikel Kategorie)
  4. Magazintisch mit PageID als FK (Magazintisch hält Magazininformationen)

Ich musste einige Änderungen an meiner database auf der Grundlage einiger Vorschläge gemacht, um meine vorherige Frage, die direkt mit dieser Frage verbunden ist , die vorherige Frage hat Details über die database.

Ich brauche diese Spalten PID, MENU, Handler,PageLangID, ParentID,IssueID, CatID,MenuPosition , um mein hierarchisches Menü zu erstellen Ich schrieb das unten, was mir die erforderliche Spalte bekomme, aber ich bin nicht in der Lage, die DISTINCT auf Menü zu laufen, so dass ich nur bekommen werde Unique Row und basierend auf dieser Ergebnismenge kann ich mein Menü erstellen.

Wenn ich versuche, DISTINCT (Menu) hinzuzufügen, erzeugt es mir Syntaxerrors.

Ich bin nicht sicher, auf meiner Anforderung basiert, die in der vorherigen Frage erwähnt wird, ob dieser Ansatz in Ordnung ist oder ich sollte einen anderen Ansatz, der nicht mehrdeutig oder professioneller ist

ABFRAGE

  SELECT PID, MENU, Handler, PageLangID, ParentID,IssueID, CatID, MenuPosition FROM ( --Pages Table SELECT PageId AS PID,SUBSTRING(PageName,0,20) AS MENU,SUBSTRING(PageInternalLinkURL,0,24) AS Handler, PageLangID,PageInheritance AS ParentID, 1 AS IssueID, 1 AS CatID, PageLinkPosition as MenuPosition FROM pg_Pages WHERE PageLangID = 1 UNION --Article Table SELECT p.PageID as PID, SUBSTRING(c.ArticleCategoryName,0,20) AS MENU,SUBSTRING(p.PageInternalLinkURL,0,24) AS Handler,LanguageID,p.PageID AS ParentID,IssueID,c.ArticleCategoryID AS CatID, 1 AS MenuPosition FROM art_Articles a JOIN art_Category c ON a.ArticleCategoryID = c.ArticleCategoryID JOIN pg_pages p ON p.PageID = a.PageID WHERE LanguageID =1 UNION --Article Category Table SELECT p.PageID AS PID, SUBSTRING(c.ArticleCategoryName,0,20) AS MENU,SUBSTRING(p.PageInternalLinkURL,0,24) AS Handler, LangID,p.PageID,1, ArticleCategoryID, 1 AS MenuPosition FROM art_Category c JOIN pg_Pages p ON c.PageID = p.PageID WHERE LangID =1 UNION --Magazine Table SELECT p.PageID AS PID, CAST(IssueCode AS varchar(10)),SUBSTRING(p.PageInternalLinkURL,0,24) AS Handler,LangID,p.PageID AS ParentID, m.IssueID AS IssueID, 1, 1 AS MenuPosition FROM Magazine m JOIN pg_pages p ON m.PageID = p.PageID WHERE LangID =1 ) AS T WHERE T.PageLangID = 1 ORDER BY MenuPosition 

AUSGABE

 PID MENU Handler PageLangID ParentID IssueID CatID MenuPosition ----------- -------------------- ------------------------ ----------- ----------- ----------- ----------- ------------ 5 Book Review Articles.aspx 1 5 5 18 1 5 Business Articles.aspx 1 5 5 16 1 5 Group News Articles.aspx 1 5 5 6 1 5 Infrastructure Articles.aspx 1 5 5 17 1 5 Politics Articles.aspx 1 5 1 1 1 5 Politics Articles.aspx 1 5 3 1 1 5 Politics Articles.aspx 1 5 4 1 1 5 Politics Articles.aspx 1 5 5 1 1 6 Book Review Article-Category.aspx 1 6 1 18 1 6 Business Article-Category.aspx 1 6 1 16 1 6 Chairman's Message Article-Category.aspx 1 6 1 9 1 6 Culture Article-Category.aspx 1 6 1 3 1 6 Economy Article-Category.aspx 1 6 1 2 1 6 Editorial Message Article-Category.aspx 1 6 1 8 1 6 Finance Article-Category.aspx 1 6 1 19 1 6 Group News Article-Category.aspx 1 6 1 6 1 6 Habtoor Leighton Gr Article-Category.aspx 1 6 1 5 1 6 Infrastructure Article-Category.aspx 1 6 1 17 1 6 Lifestyle Article-Category.aspx 1 6 1 20 1 6 People Article-Category.aspx 1 6 1 7 1 6 Politics Article-Category.aspx 1 6 1 1 1 6 Sports Article-Category.aspx 1 6 1 4 1 12 102 Default.aspx 1 12 3 1 1 12 103 Default.aspx 1 12 4 1 1 12 106 Default.aspx 1 12 1 1 1 12 109 Default.aspx 1 12 5 1 1 1 Home Default.aspx 1 0 1 1 10 11 Video Videos.aspx 1 10 1 1 10 2 About Us Page.aspx 1 0 1 1 20 5 Articles Articles.aspx 1 0 1 1 20 6 Categories Article-Category.aspx 1 0 1 1 25 3 News News.aspx 1 0 1 1 30 12 Archive Default.aspx 1 0 1 1 40 10 Multimedia Multimedia.aspx 1 0 1 1 60 

Sie haben die Reihenfolge in der äußeren select-statement verwendet. Als Auftrag, indem er nicht mit der deutlichen Aussage arbeitet,

Also, mach die DISTINCT in einem Unterselect und die ORDER BY in der äußeren Auswahl.

Hoffe, das wird hilfreich sein, um Ihr Problem zu lösen.

Sie benötigen DISTINCT auf alle SELECT-statementen

 SELECT DISTINCT PID, MENU, Handler, PageLangID, ParentID,IssueID, CatID, MenuPosition ...