58 messaggi dal 06 settembre 2002
Ho una struttura di categorie ad albero, ho creato la struttura con la seguente query:

with tree(catID,catParentID,catDescription) as
(
select tblSupplierCategories.catID,tblSupplierCategories.catParentID,tblSupplierCategories.catDescription from tblSupplierCategories where tblSupplierCategories.CatID=1 -- id del padre
union all
select tblSupplierCategories_1.catID,tblSupplierCategories_1.catParentID,tblSupplierCategories_1.catDescription from tblSupplierCategories tblSupplierCategories_1
inner join tree t on t.catID=tblSupplierCategories_1.catParentID
)
select catID,catParentID,catDescription from tree



Legato a delle categorie ho dei fonitori, e ho modificato la query in questo modo:


with tree(catID,catParentID,catDescription) as
(
select tblSupplierCategories.catID,tblSupplierCategories.catParentID,tblSupplierCategories.catDescription from tblSupplierCategories where tblSupplierCategories.CatID=1 -- id del padre
union all
select tblSupplierCategories_1.catID,tblSupplierCategories_1.catParentID,tblSupplierCategories_1.catDescription from tblSupplierCategories tblSupplierCategories_1
inner join tree t on t.catID=tblSupplierCategories_1.catParentID
)
select catID,catParentID,catDescription, tblUserCategory.ucaUserID, tblUsers.usrID, tblUsers.usrActive from tree INNER JOIN
tblUserCategory ON catID = tblUserCategory.ucaCategoryID INNER JOIN
tblUsers ON tblUserCategory.ucaUserID = tblUsers.usrID



Solo che così non riesco a selezionare una categoria qualsiasi e farmi estrarre tutti i fornitori che ci sono sulle sottocategorie. Questi fornitori potrebbero essere sia sotto di un livello o anche di molti livelli.

Avete qualche soluzione?

Grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve
giantex wrote:
..
Solo che così non riesco a selezionare una categoria qualsiasi e farmi estrarre tutti i fornitori che ci sono sulle sottocategorie. Questi fornitori potrebbero essere sia sotto di un livello o anche di molti livelli.


e' buona consuetudine provvedere anche un minimo di DDL e relativi statement di INSERT INTO in modo da non costringere gli altri ad inventarsi metadati e dati stessi...

al di la' di cio', sinceramente non penso di aver compreso il problema.. SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.tblSupplierCategories (
catID int,
catParentID int NULL,
catDescription varchar (10)
);
CREATE TABLE dbo.tblUsers (
usrID int,
Nome varchar(5),
usrActive bit
);
CREATE TABLE dbo.tblUserCategory (
ucaUserID int,
ucaCategoryID int
);
GO
INSERT INTO dbo.tblSupplierCategories VALUES ( 1, NULL, '.' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 2, 1, '.1' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 3, 1, '.2' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 4, 2, '.1.1' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 5, 4, '.1.1.1' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 6, 4, '.1.1.2' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 7, 3, '.2.1' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 8, 3, '.2.2' ); INSERT INTO dbo.tblSupplierCategories VALUES ( 9, 8, '.2.2.1' );
INSERT INTO dbo.tblUsers VALUES ( 1 , 'e' , 1 );
INSERT INTO dbo.tblUsers VALUES ( 2 , 'f' , 1 );
INSERT INTO dbo.tblUsers VALUES ( 3 , 'g' , 1 );
INSERT INTO dbo.tblUsers VALUES ( 4 , 'h' , 1 );

INSERT INTO dbo.tblUserCategory VALUES ( 1, 2 );
INSERT INTO dbo.tblUserCategory VALUES ( 1, 9 );
INSERT INTO dbo.tblUserCategory VALUES ( 2, 4 );
INSERT INTO dbo.tblUserCategory VALUES ( 2, 9 );
INSERT INTO dbo.tblUserCategory VALUES ( 2, 5 );
INSERT INTO dbo.tblUserCategory VALUES ( 3, 6 );
INSERT INTO dbo.tblUserCategory VALUES ( 4, 2 );
INSERT INTO dbo.tblUserCategory VALUES ( 4, 9 );
INSERT INTO dbo.tblUserCategory VALUES ( 4, 8 );
GO
DECLARE @Root int;
SET @Root = 1;
with tree(catID,catParentID,catDescription) as
(
select
tblSupplierCategories.catID,tblSupplierCategories.catParentID,tblSupplierCategories.catDescription from tblSupplierCategories
where tblSupplierCategories.CatID= @Root
id del padre
union all
select
tblSupplierCategories_1.catID,tblSupplierCategories_1.catParentID,tblSupplierCategories_1.catDescription from tblSupplierCategories tblSupplierCategories_1
inner join tree t on t.catID=tblSupplierCategories_1.catParentID )
select catID,catParentID,catDescription, u.*
from tree t
LEFT JOIN dbo.tblUserCategory uc ON uc.ucaCategoryID = t.catID LEFT JOIN dbo.tblUsers u ON u.usrID = uc.ucaUserID
ORDER BY catDescription;

GO
DROP TABLE dbo.tblSupplierCategories, dbo.tblUserCategory, dbo.tblUsers; --<----------
catID catParentID catDescription usrID Nome usrActive ---------
---------
------------
---------
---
-------
1 NULL . NULL NULL NULL 2 1 .1 1 e 1
2 1 .1 4 h 1
4 2 .1.1 2 f 1
5 4 .1.1.1 2 f 1
6 4 .1.1.2 3 g 1
3 1 .2 NULL NULL NULL 7 3 .2.1 NULL NULL NULL 8 3 .2.2 4 h 1
9 8 .2.2.1 1 e 1
9 8 .2.2.1 2 f 1
9 8 .2.2.1 4 h 1

l'albero mi pare venga ritornato correttamente, popolato come richiesto.. modificando il nodo di partenza, @Root, ottieni il ramo interessante e cosi' via...
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
58 messaggi dal 06 settembre 2002
Scusa per non aver inserito le DDL , la prossima volta cercherò di inserire il tutto.

Hai capito perfettamente cosa mi serviva , ti ringrazio

Ciao
Gianluca

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.