2017-01-09 2 views
0

Pour vous donner un bref résumé, je voudrais:

1. Joindre deux tables à la fois contenant de l'information Carnet d'adresses,

2. Concaténer le « indicatif régional du numéro de téléphone » et « numéro de téléphone » (parce qu'ils sont stocké dans des colonnes séparées dans notre base de données)

3. Si le 'Carnet d'adresses #' de la Colonne 1 est répété, faites apparaître les informations sur la même ligne (voir ci-dessous par exemple).Comment puis-je transposer dynamiquement des lignes dans des colonnes dans SQL?


Voici les tables et les champs, je me sers:

Les champs dans le tableau 1 (ABC_F0115):
'Adresse Book #'
'Type de téléphone'
« Zone de téléphone Code '
"Numéro de téléphone"

Champs du tableau 2 (ABC_F0 101):
'Adresse Book #'
'carnet d'adresses de type'

Mon actuelle SQL est:

SELECT WPAN8 'Address Book#', WPPHTP 'Phone Type', WPAR1 'Phone Area Code', WPPH1 'Phone Number', ABAT1 'Address Book concat('(',LTRIM(RTRIM(WPAR1)),')', ' ', WPPH1) AS 'Full Phone Number' FROM ABC.F0101 JOIN ABC.F0115 ON WPAN8=ABAN8 WHERE ABAT1='AR'; 



Il retourne un tableau similaire à celui ci-dessous:


| AddressBook # | PhoneType | PhoneAreaCode | Numéro de téléphone |
| ___________ _________ _____________ ___________ |
| 2160 ________ | Cellule ______ | 000 __________ | 000-0000 _____ |
| 2160 ________ | Fax______ | 111 __________ | 111-1111 ______ |
| 2161 ________ | Cellule ______ | 222 __________ | 222-2222 _____ |
| 2161 ________ | Fax______ | 333 __________ | 333-3333 _____ |
| 2162 ________ | Accueil____ | 444 __________ | 444-4444 _____ |


Cependant, je voudrais la table retourné à ressembler à:


| # AddressBook | PhoneType1 | Téléphone # 1 | PhoneType2 | Téléphone # 2 | PhoneType3 | Téléphone # 3 |
| ___________ _ _________ _ _______ _ _________ _ _________ _ _______ _ _______ |
| 2160 ________ | Cellule _______ | 000-0000 | Fax _______ | 111-1111_ | ___________ | ________ |
| 2161 ________ | Cellule _______ | 222-2222 | Fax _______ | 333-3333 | ___________ | ________ |
| 2163 ________ | Accueil _____ | 444-4444 | Fax _______ | 333-3333 | ___________ | ________ |


Je sais que je dois transposer mes lignes dans les colonnes dynamiquement ... mais je ne peux pas comprendre tout à fait mon SQL. Aucune suggestion?

+0

Veuillez marquer RDMS. Il n'y a pas deux dialectes SQL identiques. – Parfait

Répondre

0

Je suppose que c'est quelque chose que vous verrouillez avant?

WITH Result AS (
    SELECT 
     WPAN8, 
     WPPHTP, 
     WPPH1 'Phone Number', 
     ROW_NUMBER() OVER (PARTITION BY WPAN8, ORDER BY WPPHTP,WPPH1) AS CallRowNumber 
    FROM ABC.F0101 
    JOIN ABC.F0115 ON WPAN8=ABAN8 
    WHERE ABAT1='AR'; 
) 
SELECT 
    WPAN8 'Address Book#', 
    Resutl1.WPPHTP AS 'Phone Type1', 
    Resutl1.WPPH1 'Phone Number1', 
    Resutl2.WPPHTP AS 'Phone Type2', 
    Resutl2.WPPH1 'Phone Number2', 
    Resutl3.WPPHTP AS 'Phone Type3', 
    Resutl3.WPPH1 'Phone Number3', 
FROM ABC.F0101 
LEFT JOIN Result AS Resutl1 ON Resutl1.WPAN8=ABAN8 AND CallRowNumber = 1 
LEFT JOIN Result AS Resutl2 ON Resutl2.WPAN8=ABAN8 AND CallRowNumber = 2 
LEFT JOIN Result AS Resutl3 ON Resutl3.WPAN8=ABAN8 AND CallRowNumber = 3 

Comme je ne savais pas quelle syntaxe SQL que vous avez utilisé, je l'ai fait avec SQL Server (TSQL).