J'ai une table avec deux colonnes int et j'essaye ce qui suit: dans l'instruction SELECT pour la table, je vais si l'une de ces valeurs est 0 que la colonne sera vide.
J'ai essayé avec ce SQL mais ensuite j'ai eu 0 et pas '':
Nummer (varchar) | ATBPos (int) | ATbStk (int) | Typ (varchar) -----------------+--------------+--------------+-------------- 54542542542 | | | OHNE 45454 | 15 | 45 | ATB
Table Vorpapier ressemble à ceci:
Nummer (varchar) | ATBPos (int) | ATbStk (int) | Typ (varchar) -----------------+--------------+--------------+-------------- 54542542542 | 0 | 0 | OHNE 45454 | 15 | 45 | ATB
Et le résultat devrait ressembler à ceci:
SELECT
Typ
, Nummer
, IIF(ATBPos > 0 , ATBPos, '') AS ATBPos
, IIF(ATBStk > 0 , ATBStk, '') AS ATBStk
, ID
FROM
Vorpapier
WHERE
FremdID = 1
AND PosNummer = 1
4 Réponses :
Utilisez simplement
iif (ATBPos = 0, null, ATBPos) comme ATBPos
et
iif (ATBStk = 0, null, ATBStk) comme ATBStk
J'ai eu une erreur: SQL (102) Syntaxe incorrecte près de "AT Pos". Pensez que c'est parce que dans la colonne int ne peut pas être Null
@ Zam89 veuillez jeter un oeil à petite démo nous ne changeons pas la structure du tableau, mais juste le style d'affichage .
Vous avez raison, j'ai une erreur de frappe dans mon SQL, désolé pour ça
@ Zam89 pas important :)
Essayez ceci: -
SELECT
Typ
, Nummer
, IF(ATBPos > 0 , ATBPos, '') AS ATBPos
, IF(ATBStk > 0 , ATBStk, '') AS ATBStk
, ID
FROM
Vorpapier
WHERE
FremdID = 1
AND PosNummer = 1
OU vous devriez changer IIF en if dans votre requête SQL. Essayez aussi: -
SELECT
Typ
, Nummer
, (CASE WHEN ATBPos > 0 then ATBPos ELSE '' END) as ATBPos
, (CASE WHEN ATBStk > 0 then ATBStk ELSE '' END) as ATBStk
, ID
FROM
Vorpapier
WHERE
FremdID = 1
AND PosNummer = 1
vous pouvez diffuser en varchar.
SELECT
Typ
, Nummer
, IIF(ATBPos > 0 , cast(ATBPos as varchar), '') AS ATBPos
, IIF(ATBStk > 0 , cast(ATBStk as varchar), '') AS ATBStk
, ID
FROM
Vorpapier
WHERE
FremdID = 1
AND PosNummer = 1
En SQL, une expression renvoie un type spécifique. Dans ce cas, le type est un nombre et '' n'est pas un nombre. Donc, il est converti en un, d'où vient le 0 .
La solution est d'utiliser des types compatibles. Je recommande d'utiliser une expression case ( case fait partie du SQL standard). Cela ressemble à:
SELECT Typ, Nummer,
(CASE WHEN ATBPos > 0 THEN CAST(ATBPos as VARCHAR(255)) ELSE '' END) AS ATBPos,
(CASE WHEN ATBStk > 0 THEN CAST(ATBStk as VARCHAR(255)) ELSE '' END) AS ATBStk, ID
FROM Vorpapier
WHERE FremdID = 1 AND
PosNummer = 1;
Sinon, si vous voulez vraiment une chaîne vide plutôt que NULL , utilisez la conversion de type:
SELECT Typ, Nummer,
(CASE WHEN ATBPos > 0 THEN ATBPos END) AS ATBPos,
(CASE WHEN ATBStk > 0 THEN ATBStk END) AS ATBStk, ID
FROM Vorpapier
WHERE FremdID = 1 AND
PosNummer = 1;
quel est votre DB?
DB est: MS SQL 11.0
Je me demande s'il existe des valeurs entières négatives pour les colonnes ATBPos et / ou ATbStk?
Cela dépend du TIP, seulement si Tyo est ATB alors ces deux valeurs sont supérieures à 0 sinon elles sont 0
Le problème, au cas où vous vous poseriez encore la question, est que votre résultat «» est converti en int car le premier type de données de résultat est int. Le cast d'une chaîne vide en int donne la valeur 0.