Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème d'écriture d'une requête

2 réponses
Avatar
jack
Bonjour,

J'ai un problème pour l'écriture d'une requête.
J'ai une table AUTORISATION avec comme colonnes

AAUT_NUMECRAN smallint
AAUT_UTILID smallint
AAUT_NIVEAU smallint

où AAUT_NUMECRAN représnte le numéro de l'écran appelé dans l'applicatif
AAUT_UTILID l'utilisateur en cours
AAUT_NIVEAU le niveau d'autorisation sur cet écran (valeurs possibles
1,2,3,4)

et j'ai des données du style
1,1,1 -- écran 1, utilisateur 1, niveau 1
1,1,2 -- écran 1, utilisateur 1, niveau 2
1,1,3 -- écran 1, utilisateur 1, niveau 3
2,1,2 -- écran 2, utilisateur 1, niveau 2
2,1,4 -- écran 2, utilisateur 1, niveau 4
1,2,1 -- écran 1, utilisateur 2, niveau 1
1,2,3 -- écran 1, utilisateur 2, niveau 3

je voudrais savoir s'il est possible avec une requête (sans passer par des
boucles) d'obtenir le résultat suivant

AAUT_NUMECRAN AAUT_UTILID Niveau 1 Niveau 2
Niveau 3 Niveau 4
1 1
1 1 1 0
2 1
0 0 0 1
1 2
1 0 1 0

Merci par avance

2 réponses

Avatar
Fred BROUARD
Bonjour,

Ce n'est pas étonnant que vous n'y arriviez pas. SQL n'est pas fait pour
cela !
Ce que vous tentez de faire c'est de la cosmétique. Pas de la base de
données. Faites cela sur un serveur de présentation.

A défaut vous pouvez quand même utiliser une requête "gore" à l'aide de
l'opérateur PIVOT (2005) ou à défaut un case.

Dans tous les cas il vous faut connaître préalablement le nombre de
"niveaux"

Sur PIVOT :

Sur de telles requêtes :

1) http://sqlpro.developpez.com/SQL_Server_2K5/N1.php
§ 1.8 Opérateur PIVOT / UNPIVOT

2) http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

Ne comptez surtout pas sur moi, pour vous écrire une telle requête. J'y
suis particulièrement allergique !

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.sqlspot.com *************************



jack a écrit :
Bonjour,

J'ai un problème pour l'écriture d'une requête.
J'ai une table AUTORISATION avec comme colonnes

AAUT_NUMECRAN smallint
AAUT_UTILID smallint
AAUT_NIVEAU smallint

où AAUT_NUMECRAN représnte le numéro de l'écran appelé dans l'applicatif
AAUT_UTILID l'utilisateur en cours
AAUT_NIVEAU le niveau d'autorisation sur cet écran (valeurs possibles
1,2,3,4)

et j'ai des données du style
1,1,1 -- écran 1, utilisateur 1, niveau 1
1,1,2 -- écran 1, utilisateur 1, niveau 2
1,1,3 -- écran 1, utilisateur 1, niveau 3
2,1,2 -- écran 2, utilisateur 1, niveau 2
2,1,4 -- écran 2, utilisateur 1, niveau 4
1,2,1 -- écran 1, utilisateur 2, niveau 1
1,2,3 -- écran 1, utilisateur 2, niveau 3

je voudrais savoir s'il est possible avec une requête (sans passer par des
boucles) d'obtenir le résultat suivant

AAUT_NUMECRAN AAUT_UTILID Niveau 1 Niveau 2
Niveau 3 Niveau 4
1 1
1 1 1 0
2 1
0 0 0 1
1 2
1 0 1 0

Merci par avance






Avatar
jack
Bon bon...

Je vais faire cela côté applicatif.

Mais quand même, j'aurais bien aimé savoir comment s'écrit une telle
requête...

Merci quand même de vous être penché sur la question.




"Fred BROUARD" wrote in message
news:%
Bonjour,

Ce n'est pas étonnant que vous n'y arriviez pas. SQL n'est pas fait pour
cela !
Ce que vous tentez de faire c'est de la cosmétique. Pas de la base de
données. Faites cela sur un serveur de présentation.

A défaut vous pouvez quand même utiliser une requête "gore" à l'aide de
l'opérateur PIVOT (2005) ou à défaut un case.

Dans tous les cas il vous faut connaître préalablement le nombre de
"niveaux"

Sur PIVOT :

Sur de telles requêtes :

1) http://sqlpro.developpez.com/SQL_Server_2K5/N1.php
§ 1.8 Opérateur PIVOT / UNPIVOT

2) http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L9

Ne comptez surtout pas sur moi, pour vous écrire une telle requête. J'y
suis particulièrement allergique !

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.sqlspot.com *************************



jack a écrit :
> Bonjour,
>
> J'ai un problème pour l'écriture d'une requête.
> J'ai une table AUTORISATION avec comme colonnes
>
> AAUT_NUMECRAN smallint
> AAUT_UTILID smallint
> AAUT_NIVEAU smallint
>
> où AAUT_NUMECRAN représnte le numéro de l'écran appelé dans l'applicatif
> AAUT_UTILID l'utilisateur en cours
> AAUT_NIVEAU le niveau d'autorisation sur cet écran (valeurs possibles
> 1,2,3,4)
>
> et j'ai des données du style
> 1,1,1 -- écran 1, utilisateur 1, niveau 1
> 1,1,2 -- écran 1, utilisateur 1, niveau 2
> 1,1,3 -- écran 1, utilisateur 1, niveau 3
> 2,1,2 -- écran 2, utilisateur 1, niveau 2
> 2,1,4 -- écran 2, utilisateur 1, niveau 4
> 1,2,1 -- écran 1, utilisateur 2, niveau 1
> 1,2,3 -- écran 1, utilisateur 2, niveau 3
>
> je voudrais savoir s'il est possible avec une requête (sans passer par


des
> boucles) d'obtenir le résultat suivant
>
> AAUT_NUMECRAN AAUT_UTILID Niveau 1 Niveau 2
> Niveau 3 Niveau 4
> 1 1
> 1 1 1 0
> 2 1
> 0 0 0 1
> 1 2
> 1 0 1 0
>
> Merci par avance
>
>
>
>