SO TEUNICILEMENT Il y a 1 question et 1 problème:
Exemple: P> SELECT
(CASE WHEN TABLE.DEPARTEMENT = 1 THEN TABLE.ZD ELSE null END) AS ZD,
(CASE WHEN TABLE.DEPARTEMENT = 2 THEN TABLE.EK ELSE null END) AS EK,
TABLE.DISTRIBUTOR,
sum(TABLE.SOMETHING) AS SOMETHING,
FROM TABLE
GROUP BY
ZD
EK
TABLE.DISTRIBUTOR
TABLE.DEPARTEMENT
5 Réponses :
Non, il n'y a pas de test d'égalité de caractères génériques. Vous devez énumérer tous les champs que vous souhaitez tester individuellement. Si vous ne voulez pas tester chaque champ individuel, vous pouvez utiliser un piratage tel que concaténant tous les champs, par exemple
WHERE (a.foo + a.bar + a.baz) = (b.foo + b.bar + b.az)
"+" n'est pas l'opérateur de concaténation, votre exemple échouera s'il existe une colonne non numérique. Même si vous utilisez la bonne concaténation, cela ne fonctionnera pas correctement dans de nombreux cas. Par exemple 'a' || null || 'c' code> et
'a' || 'B' || null code> retournera tous les deux NULL, tandis que l'intention serait évidemment de traiter ces combinaisons comme différentes. D'autre part, une valeur nulle n'est pas égale à une autre valeur null, donc
'a' || null || 'c' code> et
'a' || null || "C" code> ne sera pas égal non plus non plus, bien que l'intention dans ce cas serait de les traiter comme étant égale.
S'il vous plaît allez crier au corps de normes SQL et dites-leur de vous installer sur un opérateur standard, puis ...
S'il vous plaît allez crier à celui que vous voulez vous-même. L'ANSI SQL Standard spécifie clairement la barre verticale double comme opérateur de concaténation.
@Marcb Si une question est étiquetée pour un SGBD en particulier, vous ne pensez pas que la réponse devrait être appropriée pour cet environnement? Une réponse mysql pourrait être inappropriée sous SQL Server. Une réponse T-SQL peut être inappropriée sous DB2. Personnellement, si vous suggérez une réponse pour un système, je suis inconnu avec, j'essaie de vérifier la référence appropriée si j'ai du temps. Et j'inclus généralement une mise en garde que mon expérience est principalement sur ___. Cela donne aux lecteurs une tête pour être un peu plus prudente dans la prise de mon réponse Verbatim, afin de vérifier les détails et d'être plus indulgent dans une critique.
En réalité, il existe un test d'égalité de caractères génériques.
Je ne suis pas sûr de savoir pourquoi vous allez grouper par Field1, cela semblerait impossible dans votre exemple. J'ai essayé de l'adapter à votre question: Cela échouera pour des types de données qui ne sont pas comparables p> p>
C'est une bonne réponse à ma question, mais il est triste que ce soit seulement possible de manière unique. Maintenant, seul le problème doit être résolu.
@Khazar oui c'est très complexe. Mais je voulais juste démontrer que c'était possible
Si vous avez besoin de trouver toutes les lignes de tablier qui correspondent à tableb, que de l'intersect ou de l'intersect distincts? Cependant, si vous ne voulez que des lignes d'un rang de la ligne Valeurs d'une rangée de B, alors pourquoi votre code d'échantillon prend-il certaines valeurs d'A et d'autres de B? Si la ligne correspond à toutes les colonnes, cela semblerait inutile. (Peut-être que votre question pourrait être expliquée un peu plus complètement?) P> p>
Le problème est avec le groupe et le cas. J'ai besoin de la valeur qui vient du cas, mais je ne peux pas utiliser d'alias (que je dois faire parce que je ne veux pas grouper le terrain3, le champ4 et leurs valeurs non filtrées) à moins que j'utilise un sous-sélection. Donc, oui, le sous-sélection est normalement inutile, mais pas dans ce cas.
Veuillez expliquer les exigences en anglais, y compris (mais sans limiter) ce que vous devez faire avec la logique de cas et la logique correspondante. Laissez le SQL sortir pour l'instant. Nous pouvons fournir cela, une fois que nous comprenons clairement et sans ambiguïté exactement ce qui doit être fait,
@ T-Clausen Désolé, je ne sais pas pourquoi je n'ai pas vu votre réponse en donnant à la mienne.
L'explication est-elle compréhensible, dans la façon dont je l'ai écrite?
Oui je crois bien. Il semble que vous soyez dépassé le point de demander un. * = B. *, Correct? On dirait que votre SQL s'approche maintenant d'une bonne solution, hein? Bon travail. Je vais ajouter comment je ferais cela bientôt.
Désolé de dire cela, mais ce code SQL en bas est le code que j'avais avant le sommet. ;) Le top ONE était une tentative de sortir du problème du groupe en utilisant la valeur de la ligne et non la valeur de cas.
Et ici Mesdames and Gentleman est la solution au problème: @ t-clausen.dk: merci! p> @others: ... < / p> p>
Je pourrais avoir tendance à résoudre quelque chose comme ça
Voulez-vous vérifier la valeur de chaque colonne de tableau A à la colonne du tableau B avec le même nom de colonne et toutes les colonnes doivent correspondre? Ou voulez-vous dire un autre type de logique?
Exactement, mais c'est juste la question cependant et non le vrai problème, que je vais essayer de mieux expliquer / mieux expliquer dans le temps.