Gremo
02-05-2007, 13:49
Ciao a tutti.
Ho progettato una tabella molto semplice che modella la struttura a sezioni gerarchiche di un sito.
-- Tabella Section
CREATE TABLE [Section]
(
SectionId INT IDENTITY(1,1) CONSTRAINT PK_Menu PRIMARY KEY,
[Position] INT,
BelongsTo NVARCHAR(255),
ParentId INT
)
ParentId specifica qual è la sezione genitore della riga corrente
Ora ho bisogno di una query che mi selezioni tutte le sezioni, escluse le sezioni foglie ma che includa le sezioni top-level
Esermpio:
Section #1
--> SubSection #1
---> SubSubSection #1
--> SubSection #2
Section #2
Vorrei:
1) escludere SubSubSection #1 perchè si tratta di una foglia
2) comprendere Section #2 perchè si tratta di un elemento top-level
3) comprendere SubSection #2 per lo stesso motivo
Ho provato questa soluzione: (non considerate in join con la tabella Section_Locale)
SELECT
S1.SectionId AS ID,
SL.Name AS [NAME],
S1.Position AS POSITION,
S1.ParentId AS PARENTID,
COUNT(S2.ParentId) AS Childs
FROM
[Section] AS S1 LEFT JOIN [Section] AS S2 ON S1.SectionId = S2.ParentId
INNER JOIN Section_Locale AS SL ON S1.SectionId = SL.SectionId
GROUP BY S2.ParentId, S1.ParentId, S1.SectionId, S1.Position,SL.Name
HAVING COUNT(S2.ParentId) > 0
ORDER BY S1.SectionId, S1.ParentId
soluzione che non funziona in quanto mi esclude le sezioni top-level e prende solo le sezioni che hanno almeno 1 figlio
Il problema principale è:
1) come faccio a discriminare tra SubSubSection #1 e SubSection #2: entrambe hanno figli zero e parent id not null, tuttavia vorrei escludere SubSubSection #1 ed includere SubSection #2
Ho progettato una tabella molto semplice che modella la struttura a sezioni gerarchiche di un sito.
-- Tabella Section
CREATE TABLE [Section]
(
SectionId INT IDENTITY(1,1) CONSTRAINT PK_Menu PRIMARY KEY,
[Position] INT,
BelongsTo NVARCHAR(255),
ParentId INT
)
ParentId specifica qual è la sezione genitore della riga corrente
Ora ho bisogno di una query che mi selezioni tutte le sezioni, escluse le sezioni foglie ma che includa le sezioni top-level
Esermpio:
Section #1
--> SubSection #1
---> SubSubSection #1
--> SubSection #2
Section #2
Vorrei:
1) escludere SubSubSection #1 perchè si tratta di una foglia
2) comprendere Section #2 perchè si tratta di un elemento top-level
3) comprendere SubSection #2 per lo stesso motivo
Ho provato questa soluzione: (non considerate in join con la tabella Section_Locale)
SELECT
S1.SectionId AS ID,
SL.Name AS [NAME],
S1.Position AS POSITION,
S1.ParentId AS PARENTID,
COUNT(S2.ParentId) AS Childs
FROM
[Section] AS S1 LEFT JOIN [Section] AS S2 ON S1.SectionId = S2.ParentId
INNER JOIN Section_Locale AS SL ON S1.SectionId = SL.SectionId
GROUP BY S2.ParentId, S1.ParentId, S1.SectionId, S1.Position,SL.Name
HAVING COUNT(S2.ParentId) > 0
ORDER BY S1.SectionId, S1.ParentId
soluzione che non funziona in quanto mi esclude le sezioni top-level e prende solo le sezioni che hanno almeno 1 figlio
Il problema principale è:
1) come faccio a discriminare tra SubSubSection #1 e SubSection #2: entrambe hanno figli zero e parent id not null, tuttavia vorrei escludere SubSubSection #1 ed includere SubSection #2