0
votes

Cas et Concat en SQL

J'ai un scénario où il y a 2 tables.

Tableau 1:

 Entrez la description de l'image ici

Tableau 2:

 Entrez la description de l'image ici

Donc, la CID est l'ID client et PID est l'ID parent. Il y a 4 conditions et j'ai fabriqué des CIDS chacun d'obéir à chaque condition:

  1. Si la table1 ID client, ID parent et SSC sont identiques et il n'y a pas de date de fin sur le tableau 2, la concaténation des données du tableau 1 et du tableau 2

  2. Si la table1 ID client, ID parent et SSC sont identiques et il n'y a pas de date de fin pour cette CID sur la table, puis affichez les données du tableau 1

  3. Si TABLE1 ID client, ID parent et SSC est identique et il n'y a pas de date de fin pour cette CID dans le tableau 1, mais une date de fin est de la CID dans le tableau 2, puis concaténate les données des tables

  4. Si TABLE1 ID client, SSC sont identiques mais PID est différent, affichez les données dans deux lignes distinctes.

    ci-dessous est la sortie souhaitée:

     Entrez la description de l'image ici

    LIEN DE REXTESTER:

    https://rexter.com/gby12899

    Je travaille toujours sur mon code d'essai et je le posterai bientôt. Toute aide sera grandement appréciée!


0 commentaires

4 Réponses :


1
votes

Il y a une contradiction entre vos conditions et la sortie souhaitée:

Si la table1 ID client, ID parent et SSC sont identiques et il n'y a pas de fin Date de cette CID sur la fois sur la table, puis affichez les données du tableau 1

donc dans la ligne 1003/1116 Le SSC doit être or20121005 , non?
J'ai eu ceci comme solution, basée sur les données de la liaison REXTESTER: xxx

Voir le Demo


0 commentaires

1
votes

Une autre solution possible à l'aide d'un CTE.

;with dataset as(
select 
    t1.* 
    ,case when (t1.End_date is null and t2.End_date is null) then t1.data
        when  (t2.End_date is null or t1.End_date is null) then t1.data + ' - ' + t2.data 
        else null 
    end AS DataConditions


from #table1 t1
    left join #table2 t2    on t1.CID = t2.CID
                                AND t1.PID = t2.PID
                                AND t1.SSC = t2.SSC

union all

select 
    t2.*
    ,case when (t1.End_date is null and t2.End_date is null) then t1.data
        when  (t2.End_date is null or t1.End_date is null) then t1.data + ' - ' + t2.data 
        else null 
    end

from #table2 t2
    left join #table1 t1    on t1.CID = t2.CID
                                AND t1.PID = t2.PID
                                AND t1.SSC = t2.SSC

WHERE t1.PID IS NULL
)

select
    CID, PID, Coalesce(DataConditions, dataset.Data) AS SSC
from dataset


0 commentaires

1
votes

salut très malheureusement, vos questions ont des erreurs 1st de toutes les 4 questions de la part de toutes les 4 questions de signification "Si l'ID client de la Table1, l'ID parent et la SSC sont identiques" car ils sont identiques afin qu'ils soient identiques lorsque la jointure est utilisée.

J'ai essayé de changer vos questions et j'ai tenté de le résoudre p>

Les 2 questions suivantes que j'ai répondu mais pour être honnête, c'est juste une question d'ajout de colonnes à la liste de concessions et à la condition, sinon vous pouvez utiliser cette question. Requête pour obtenir vos réponses p>

Cas de requête: 1_IF Il y a devenue enddate dans le tableau1 et sans enddate dans le tableau 2, puis concaténate Table1 SSC + Table1 StartDate + Table1 Enddate P>

2_IF Il n'y a pas de findate Sur les deux tables, affichez la valeur de table1 SSC + Table2 StartDate Space Valeur de la colonne de données Table2 P>

SELECT T1.CID
,T1.PID
,CASE
    WHEN T1.EndDate IS NOT NULL AND ISNULL(T2.EndDate,'') = '' THEN CONCAT(T1.SSC, T1.StartDate,T1.EndDate)
    WHEN ISNULL(T1.EndDate,'') =  '' AND ISNULL(T2.EndDate,'') =  ''  THEN CONCAT(T1.SSC, T2.StartDate, '  ', T2.Data)
ELSE NULL END AS SSC


FROM temp.dbo.TABLE1 AS T1
LEFT JOIN temp.dbo.TABLE2 AS T2 ON T1.CID = T2.CID AND T1.PID = T2.PID AND T1.SSC = T2.SSC


0 commentaires

1
votes

Ceci produit les résultats exacts que vous recherchez, sur vos données de démonstration. XXX PRE>

Cependant, vous ne décrivez pas la relation entre les 2 tables, donc je ne suis donc pas sûr que je ne sais pas Si cela fonctionnera sur des données réelles - pourrait-il y avoir plus d'enregistrements pour une combinaison CID + SSC dans 1 table que ce qu'il y a dans l'autre? Par exemple, la table2 pourrait-elle ressembler à ceci - Ajout d'une autre rangée pour CID 1004: P>

create table #table2(CID int,PID int,SSC varchar(5),Start_date varchar(30),End_date varchar(30), Data varchar(20))
insert #table2
values
(1001,  1333,   'OP','20111015',NULL,'OP20111015'),
(1002,  1245,   'OR','20131005',NULL,'OR20131005'),
(1003,  1116,   'OP','20131415',NULL,'OP2013141520131516'),
(1004,  1235,   'OP','20121015',NULL,'OP20121015'),
(1004,  1234,   'OP','20151015',NULL,'WHAT')


0 commentaires