Comment combiner les deux enregistrements en une seule ligne?
Supposons que j'ai un tableau avec des colonnes id, name, phone_type, phone_no
et j'ai 2 dossiers
{1, Tom, home, 123}
{2, Tom, mobile, 234}
Si je viens d'utiliser sql:
SELECT * FROM table WHERE name = tom;
Il indique à la fois les enregistrements.
Cependant, je voudrais afficher dans une ligne comme:
Tom, mobile,234,home,123
quelque chose comme ça...
Comment puis-je modifier le sql dans db2?
S'il vous plaît aider.
Quelles colonnes vous cherchez dans la production?
système de base de données, et quelle version?? SQL est juste le Structured Query Language - une langue utilisée par de nombreux systèmes de base de données, mais pas un produit de base de données... fonctionnalités comme c'est souvent spécifiques au fournisseur - nous vraiment besoin de savoir ce système de base de données vous êtes en utilisant....
Regarde les réponses dans stackoverflow.com/questions/194852/...
Y sont toujours seulement deux types de téléphone? Et qui sont ces toujours
désolé, la base de données db2
système de base de données, et quelle version?? SQL est juste le Structured Query Language - une langue utilisée par de nombreux systèmes de base de données, mais pas un produit de base de données... fonctionnalités comme c'est souvent spécifiques au fournisseur - nous vraiment besoin de savoir ce système de base de données vous êtes en utilisant....
Regarde les réponses dans stackoverflow.com/questions/194852/...
Y sont toujours seulement deux types de téléphone? Et qui sont ces toujours
'mobile'
et 'home'
? Si non, s'il vous plaît pourriez-vous décrire tous les cas de figure et quelle sortie vous voulez? (NOTE: Si vous pouvez avoir un numéro de téléphone types, il est fait d'une pratique courante de laisser les données exactement comme vous l'avez déjà.)désolé, la base de données db2
OriginalL'auteur jjLin | 2012-08-13
Vous devez vous connecter pour publier un commentaire.
En voici une:
OriginalL'auteur Gordon Linoff
Ici est un exemple générique à l'aide de fonctions OLAP. Cela permettra d'obtenir les quatre premières paires de type de téléphone et le numéro de téléphone pour chaque nom. Si quelqu'un a moins de quatre, les autres seront remplis avec des valeurs NULL. Il est évident comment vous pourriez développer cela plus de quatre.
La sélection externe garantit que vous obtenez seulement une ligne par personne. Vous avez besoin de cette parce que le résultat d'une OLAP fonction (dans ce cas
min(id)
) ne peut pas être mis directement dans une clause where.lead()
, bien que l'OP n'a pas de liste de la version qu'il utilise. Cela limite également les résultats à 4 numéros de téléphone - Si toutes les OP besoins est de 2, je pourrais juste essayer une auto-jointure, plutôt que d'essayer d'utiliser l'OLAP fonction; s'il a besoin de plus de 4, vous allez avoir besoin de quelque chose d'autre...Comme je l'ai mentionné, ce serait facile de l'étendre à d'obtenir plus de 4. Ajoutez simplement plus de paires de plomb() des lignes jusqu'à ce que vous pouvez gérer le maximum possible avec vos données. Non, cette solution n'est pas assez, mais il n'y a pas un moyen élégant pour ce faire, dans DB2, malheureusement.
OriginalL'auteur dan1111
cela pourrait donner une idée
COALESCE()
est inutile, comme il va toujours avoir des données (en raison de la','
). Et si vous vous attendez à ce à exécuter dans une boucle... vous devez cesser de penser comme un impératif programmeur lorsqu'ils traitent avec SQL (vous êtes lutte contre le système).OriginalL'auteur almi_n