OVH Cloud OVH Cloud

Problème requête

3 réponses
Avatar
sebcou
Hello !

Dans une vue j'ai utilisé une petite astuce pour l'affichage. Je fais
l'affichage avec une police à espacement fixe, et je fais un concat de
plusieurs champs pour avoir 3 colonnes distinctes, voilà ce que ça donne :

SELECT LEFT(Numero, 10) + SPACE(15 - LEN(Numero)) + LEFT(Designation, 20) +
SPACE(25 - LEN(Designation)) + Dimensions as Concat

L'idée : avoir mon 1er champ, avoir à coup sûr 5 espaces ensuite, puis le 2e
champ et 5 espaces ensuite, et pour respecter mon affichage en 3 colonnes je
veux que si par exemple la désignation est plus petite que 20 (ce que je
prends dans mon LEFT), j'aie suffisamment d'espaces pour que le champ
suivant soit aligné avec les autres.

Et ça marche ! Enfin presque parce que si la longueur de mon champ
désignation est plus grande que 25, le résultat de mon calcul 25 -
LEN(Designation) est < que 0, et mon champ Concat prend la valeur null.

Y a-t-il un moyen d'améliorer ma bidouille ou de faire autrement pour éviter
ça ?

Merci de votre aide !
@+
Seb

3 réponses

Avatar
Nicolas LETULLIER
Tu vas te faire enguirlander par Fred (le SGBDR ne doit pas répondre aux
problèmes de cosmétique, ceux-ci doivent être faits par le client), mais
pour répondre à ta question, fais plutôt un

LEFT(Designation + SPACE(25), 25)
ou, pour limiter la désignation à 20 :
LEFT(Designation + SPACE(20), 20) + SPACE(5)
ou LEFT(LEFT(Designation, 20) + SPACE(25), 25)
..
vois le genre.

Nicolas.


"sebcou" a écrit dans le message de news:
41922030$
Hello !

Dans une vue j'ai utilisé une petite astuce pour l'affichage. Je fais
l'affichage avec une police à espacement fixe, et je fais un concat de
plusieurs champs pour avoir 3 colonnes distinctes, voilà ce que ça donne :

SELECT LEFT(Numero, 10) + SPACE(15 - LEN(Numero)) + LEFT(Designation, 20)
+
SPACE(25 - LEN(Designation)) + Dimensions as Concat

L'idée : avoir mon 1er champ, avoir à coup sûr 5 espaces ensuite, puis le
2e
champ et 5 espaces ensuite, et pour respecter mon affichage en 3 colonnes
je
veux que si par exemple la désignation est plus petite que 20 (ce que je
prends dans mon LEFT), j'aie suffisamment d'espaces pour que le champ
suivant soit aligné avec les autres.

Et ça marche ! Enfin presque parce que si la longueur de mon champ
désignation est plus grande que 25, le résultat de mon calcul 25 -
LEN(Designation) est < que 0, et mon champ Concat prend la valeur null.

Y a-t-il un moyen d'améliorer ma bidouille ou de faire autrement pour
éviter
ça ?

Merci de votre aide !
@+
Seb




Avatar
Fred BROUARD
faire du cosmétique dans une requête SQL est une hérésie...

Tu peut néanmoins limiter à 25 caractères comme ceci :

SELECT LEFT(Numero, 10)
+ SPACE(15 - LEN(Numero))
+ LEFT(Designation, 20)
+ CASE
WHEN SPACE(25 - LEN(Designation)) < 0
THEN ''
ELSE SPACE(25 - LEN(Designation))
END + Dimensions as Concat

A +


sebcou a écrit:
Hello !

Dans une vue j'ai utilisé une petite astuce pour l'affichage. Je fais
l'affichage avec une police à espacement fixe, et je fais un concat de
plusieurs champs pour avoir 3 colonnes distinctes, voilà ce que ça donne :

SELECT LEFT(Numero, 10) + SPACE(15 - LEN(Numero)) + LEFT(Designation, 20) +
SPACE(25 - LEN(Designation)) + Dimensions as Concat

L'idée : avoir mon 1er champ, avoir à coup sûr 5 espaces ensuite, puis le 2e
champ et 5 espaces ensuite, et pour respecter mon affichage en 3 colonnes je
veux que si par exemple la désignation est plus petite que 20 (ce que je
prends dans mon LEFT), j'aie suffisamment d'espaces pour que le champ
suivant soit aligné avec les autres.

Et ça marche ! Enfin presque parce que si la longueur de mon champ
désignation est plus grande que 25, le résultat de mon calcul 25 -
LEN(Designation) est < que 0, et mon champ Concat prend la valeur null.

Y a-t-il un moyen d'améliorer ma bidouille ou de faire autrement pour éviter
ça ?

Merci de votre aide !
@+
Seb





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
sebcou
Hello !

"Nicolas LETULLIER" a écrit dans le
message de news:


Tu vas te faire enguirlander par Fred (le SGBDR ne doit pas répondre aux
problèmes de cosmétique, ceux-ci doivent être faits par le client)



--> Je sais ! Mais là j'ai choisi cette solution, car je dois afficher des
données dans une listbox databound en c# avec affichage en plusieurs
colonnes, et je ne peux pas utiliser une listview à la place. Alors en
attendant de trouver mieux et par manque de temps je fais comme ça pour
l'instant !


vois le genre.



--> Merci !

@+
Seb