2009-08-11 8 views
1

quelqu'un peut me aider avec T-SQL pour trier ce tableauTri table SQL

ID Comment ParentId 
-- ------- -------- 
3 t1  NULL 
4 t2  NULL 
5 t1_1  3 
6 t2_1  4 
7 t1_1_1 5 

pour ressembler à ceci

ID Comment ParentId 
-- ------- -------- 
3 t1  NULL 
5 t1_1  3 
7 t1_1_1 5 
4 t2  NULL 
6 t2_1  4 

Cordialement,

Lennart

Répondre

3

essayer :

DECLARE @YourTable table (id int, Comment varchar(10), parentID int) 

INSERT INTO @YourTable VALUES (3,  't1' , NULL) 
INSERT INTO @YourTable VALUES (4,  't2' , NULL) 
INSERT INTO @YourTable VALUES (5,  't1_1' , 3) 
INSERT INTO @YourTable VALUES (6,  't2_1' , 4) 
INSERT INTO @YourTable VALUES (7,  't1_1_1', 5) 


;with c as 
(
    SELECT id, comment, parentid, CONVERT(varchar(8000),RIGHT('0000000000'+CONVERT(varchar(10),id),10)) as SortBy 
    from @YourTable 
    where parentID IS NULL 
    UNION ALL 
    SELECT y.id, y.comment, y.parentid, LEFT(c.SortBy+CONVERT(varchar(8000),RIGHT('0000000000'+CONVERT(varchar(10),y.id),10)),8000) AS SortBy 
    FROM c 
    INNER JOIN @YourTable y ON c.ID=y.PArentID 

) 
select * from C ORDER BY SortBy 

EDIT
est ici la sortie

id   comment parentid SortBy 
----------- ---------- ----------- --------------------------------- 
3   t1   NULL  0000000003 
5   t1_1  3   00000000030000000005 
7   t1_1_1  5   000000000300000000050000000007 
4   t2   NULL  0000000004 
6   t2_1  4   00000000040000000006 

(5 row(s) affected) 
+0

Merci, cela fonctionne Lennart –

+0

pourquoi le vote vers le bas? __Un simple ORDRE PAR ne fonctionnera pas__, à moins que votre colonne Commentaire ne soit toujours entrée pour que vous puissiez trier en utilisant cela, ce qui est peu probable. Je pense que le PO voulait utiliser l'ID et ParentID et ordonner par là. –

+0

Je fournis un code de travail complet, le PO dit "Merci, ça marche" et j'ai encore deux votes, sans raison. Merci! –

0
SELECT  ID, Comment, ParentId 
FROM   TestTable 
ORDER BY Comment, ParentId asc 
0

Cela ressemble beaucoup à une question de devoirs, mais voici quelques conseils sur l'endroit où aller avec ceci:

Vous voulez faire un rapide Google ou recherche StackOverflow pour la La clause ORDER BY permet d'obtenir un ensemble de résultats classés par la colonne que vous voulez utiliser (c'est-à-dire la colonne 'Comment'). Une fois que vous avez cela, vous pouvez commencer à écrire une instruction SQL pour classer vos résultats.

Si vous devez ensuite réorganiser la table actuelle (et pas seulement obtenir les résultats dans un ordre spécifique), vous devrez rechercher des tables temporaires (essayez de rechercher 'DECLARE TABLE'). Tout comme n'importe quel échange temporaire, vous pouvez placer les résultats que vous avez dans un endroit temporaire, supprimer les anciennes données, puis remplacer le contenu de la table par les données temporaires que vous avez, mais cette fois dans l'ordre souhaité.

0

Mais juste commander par Commentaire vous le donnera? Ou ai-je manqué le point ?!

declare @table table 
(
    Comment varchar(10) 
) 

insert into @table (Comment) values ('t1') 
insert into @table (Comment) values ('t2') 
insert into @table (Comment) values ('t1_1') 
insert into @table (Comment) values ('t2_1') 
insert into @table (Comment) values ('t1_1_1') 

select * from @table order by comment 
+0

Je pense que l'OP a sélectionné des valeurs pour la colonne Commentaire dans leurs données d'échantillon pour exprimer qu'ils essayaient de trier par ID et ID du parent Je doute qu'ils étaient vraiment après une solution "ORDER BY Comment". –