sql server 2005 pivot + concatenation ou agregation
2 réponses
Helter Skelter
Bonjour,
je viens de decouvrir la fonction "pivot" permettant le regroupement de
données (mais tous les exemples parlent de colonnes numériques !).
moi je veux a partir d'une "famille" creer une colonne contenant toutes les
sous_famille de niveau 1 uniquement(donc concatener du string !). Je suppose
que la fonction pivot est bien indiquée pour faire ceci.
ma table contient les champs suivants
id, id_categorie, parent, niveau, famille, s-famille
je travaille en asp.net 2 vb avec sql 2005
je rajoute qu'il existe une fonction "LISTAGG" mais qui ne marche pas avec
sql server 2005
exemple :
CREATE TABLE Strings (String VARCHAR(20))
il existe bien ceci SELECT String + ', ' AS [text()] FROM Strings ORDER BY String FOR XML PATH('')
mais le FOR XML PATH('') est rejeté par le pivot !
voici ma requette pivot (mais sans agregation)
DECLARE ze_Cursor CURSOR FOR SELECT id, id_categorie, parent, niveau, rayon, famille FROM T_Tree WHERE niveau = '0' or niveau ='1'
OPEN ze_Cursor
--parcourir les enregistrements du curseur. FETCH NEXT FROM ze_Cursor
WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM ze_Cursor END
CLOSE ze_Cursor DEALLOCATE ze_Cursor
merci pour votre aide
pour résoudre ce problème vous pouvez soit : 1) implémenter une UDF et l'apeller dans la requête SELECT 2) utiliser une CTE (expression de table)
Sur la CTE, lisez l'article (en anglais) que j'ai écrit : http://www.sqlservercentral.com/columnists/fBROUARD/recursivequeriesinsql1999andsqlserver2005.asp vous y verrez comment faire une concaténation (entre autres).
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Bonjour,
Helter Skelter a écrit :
Bonjour,
je viens de decouvrir la fonction "pivot" permettant le regroupement de
données (mais tous les exemples parlent de colonnes numériques !).
Vous pouvez le faire avec n'importe quelle données.
moi je veux a partir d'une "famille" creer une colonne contenant toutes les
sous_famille de niveau 1 uniquement(donc concatener du string !).
la concaténation n'a rine à voir avec des fonctions statistiques de
calculs d'agrégats.
Je suppose
que la fonction pivot est bien indiquée pour faire ceci.
pas du tout !
ma table contient les champs suivants
id, id_categorie, parent, niveau, famille, s-famille
je travaille en asp.net 2 vb avec sql 2005
je rajoute qu'il existe une fonction "LISTAGG" mais qui ne marche pas avec
sql server 2005
exemple :
CREATE TABLE Strings (String VARCHAR(20))
il existe bien ceci
SELECT String + ', ' AS [text()]
FROM Strings
ORDER BY String
FOR XML PATH('')
mais le FOR XML PATH('') est rejeté par le pivot !
voici ma requette pivot (mais sans agregation)
DECLARE ze_Cursor CURSOR FOR
SELECT id, id_categorie, parent, niveau, rayon, famille
FROM T_Tree
WHERE niveau = '0' or niveau ='1'
OPEN ze_Cursor
--parcourir les enregistrements du curseur.
FETCH NEXT FROM ze_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM ze_Cursor
END
CLOSE ze_Cursor
DEALLOCATE ze_Cursor
merci pour votre aide
pour résoudre ce problème vous pouvez soit :
1) implémenter une UDF et l'apeller dans la requête SELECT
2) utiliser une CTE (expression de table)
Sur la CTE, lisez l'article (en anglais) que j'ai écrit :
http://www.sqlservercentral.com/columnists/fBROUARD/recursivequeriesinsql1999andsqlserver2005.asp
vous y verrez comment faire une concaténation (entre autres).
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
il existe bien ceci SELECT String + ', ' AS [text()] FROM Strings ORDER BY String FOR XML PATH('')
mais le FOR XML PATH('') est rejeté par le pivot !
voici ma requette pivot (mais sans agregation)
DECLARE ze_Cursor CURSOR FOR SELECT id, id_categorie, parent, niveau, rayon, famille FROM T_Tree WHERE niveau = '0' or niveau ='1'
OPEN ze_Cursor
--parcourir les enregistrements du curseur. FETCH NEXT FROM ze_Cursor
WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM ze_Cursor END
CLOSE ze_Cursor DEALLOCATE ze_Cursor
merci pour votre aide
pour résoudre ce problème vous pouvez soit : 1) implémenter une UDF et l'apeller dans la requête SELECT 2) utiliser une CTE (expression de table)
Sur la CTE, lisez l'article (en anglais) que j'ai écrit : http://www.sqlservercentral.com/columnists/fBROUARD/recursivequeriesinsql1999andsqlserver2005.asp vous y verrez comment faire une concaténation (entre autres).
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Helter Skelter
Merci frederic et meilleurs voeux je file voir vos liens...
"Fred BROUARD" a écrit dans le message de news: %
Bonjour,
Helter Skelter a écrit :
Bonjour, je viens de decouvrir la fonction "pivot" permettant le regroupement de données (mais tous les exemples parlent de colonnes numériques !).
Vous pouvez le faire avec n'importe quelle données.
moi je veux a partir d'une "famille" creer une colonne contenant toutes les sous_famille de niveau 1 uniquement(donc concatener du string !).
la concaténation n'a rine à voir avec des fonctions statistiques de calculs d'agrégats.
Je suppose que la fonction pivot est bien indiquée pour faire ceci.
pas du tout !
ma table contient les champs suivants id, id_categorie, parent, niveau, famille, s-famille
je travaille en asp.net 2 vb avec sql 2005
je rajoute qu'il existe une fonction "LISTAGG" mais qui ne marche pas avec sql server 2005 exemple : CREATE TABLE Strings (String VARCHAR(20))
il existe bien ceci SELECT String + ', ' AS [text()] FROM Strings ORDER BY String FOR XML PATH('')
mais le FOR XML PATH('') est rejeté par le pivot !
voici ma requette pivot (mais sans agregation)
DECLARE ze_Cursor CURSOR FOR SELECT id, id_categorie, parent, niveau, rayon, famille FROM T_Tree WHERE niveau = '0' or niveau ='1'
OPEN ze_Cursor
--parcourir les enregistrements du curseur. FETCH NEXT FROM ze_Cursor
WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM ze_Cursor END
CLOSE ze_Cursor DEALLOCATE ze_Cursor
merci pour votre aide
pour résoudre ce problème vous pouvez soit : 1) implémenter une UDF et l'apeller dans la requête SELECT 2) utiliser une CTE (expression de table)
Sur la CTE, lisez l'article (en anglais) que j'ai écrit : http://www.sqlservercentral.com/columnists/fBROUARD/recursivequeriesinsql1999andsqlserver2005.asp vous y verrez comment faire une concaténation (entre autres).
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************
Merci frederic et meilleurs voeux
je file voir vos liens...
"Fred BROUARD" <brouardf@club-internet.fr> a écrit dans le message de news:
%23GaID5TKHHA.2632@TK2MSFTNGP06.phx.gbl...
Bonjour,
Helter Skelter a écrit :
Bonjour,
je viens de decouvrir la fonction "pivot" permettant le regroupement de
données (mais tous les exemples parlent de colonnes numériques !).
Vous pouvez le faire avec n'importe quelle données.
moi je veux a partir d'une "famille" creer une colonne contenant toutes
les sous_famille de niveau 1 uniquement(donc concatener du string !).
la concaténation n'a rine à voir avec des fonctions statistiques de
calculs d'agrégats.
Je suppose que la fonction pivot est bien indiquée pour faire ceci.
pas du tout !
ma table contient les champs suivants
id, id_categorie, parent, niveau, famille, s-famille
je travaille en asp.net 2 vb avec sql 2005
je rajoute qu'il existe une fonction "LISTAGG" mais qui ne marche pas
avec sql server 2005
exemple :
CREATE TABLE Strings (String VARCHAR(20))
il existe bien ceci
SELECT String + ', ' AS [text()]
FROM Strings
ORDER BY String
FOR XML PATH('')
mais le FOR XML PATH('') est rejeté par le pivot !
voici ma requette pivot (mais sans agregation)
DECLARE ze_Cursor CURSOR FOR
SELECT id, id_categorie, parent, niveau, rayon, famille
FROM T_Tree
WHERE niveau = '0' or niveau ='1'
OPEN ze_Cursor
--parcourir les enregistrements du curseur.
FETCH NEXT FROM ze_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM ze_Cursor
END
CLOSE ze_Cursor
DEALLOCATE ze_Cursor
merci pour votre aide
pour résoudre ce problème vous pouvez soit :
1) implémenter une UDF et l'apeller dans la requête SELECT
2) utiliser une CTE (expression de table)
Sur la CTE, lisez l'article (en anglais) que j'ai écrit :
http://www.sqlservercentral.com/columnists/fBROUARD/recursivequeriesinsql1999andsqlserver2005.asp
vous y verrez comment faire une concaténation (entre autres).
A +
--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
il existe bien ceci SELECT String + ', ' AS [text()] FROM Strings ORDER BY String FOR XML PATH('')
mais le FOR XML PATH('') est rejeté par le pivot !
voici ma requette pivot (mais sans agregation)
DECLARE ze_Cursor CURSOR FOR SELECT id, id_categorie, parent, niveau, rayon, famille FROM T_Tree WHERE niveau = '0' or niveau ='1'
OPEN ze_Cursor
--parcourir les enregistrements du curseur. FETCH NEXT FROM ze_Cursor
WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM ze_Cursor END
CLOSE ze_Cursor DEALLOCATE ze_Cursor
merci pour votre aide
pour résoudre ce problème vous pouvez soit : 1) implémenter une UDF et l'apeller dans la requête SELECT 2) utiliser une CTE (expression de table)
Sur la CTE, lisez l'article (en anglais) que j'ai écrit : http://www.sqlservercentral.com/columnists/fBROUARD/recursivequeriesinsql1999andsqlserver2005.asp vous y verrez comment faire une concaténation (entre autres).
A +
-- Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com Audit, conseil, expertise, formation, modélisation, tuning, optimisation ********************* http://www.datasapiens.com ***********************