J'ai un scénario où il y a 2 tables. P>
Tableau 1: P>
Tableau 2: P>
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: p>
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 P> LI>
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 P> LI>
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 p> li>
Si TABLE1 ID client, SSC sont identiques mais PID est différent, affichez les données dans deux lignes distinctes. P> li> ol>
ci-dessous est la sortie souhaitée: p>
LIEN DE REXTESTER: P>
https://rexter.com/gby12899 p>
Je travaille toujours sur mon code d'essai et je le posterai bientôt. Toute aide sera grandement appréciée! P>
4 Réponses :
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 p> blockquote>
donc dans la ligne
1003/1116 code> LeSSC code> doit êtreor20121005 code>, non?
J'ai eu ceci comme solution, basée sur les données de la liaison REXTESTER: p>xxx pré> Voir le Demo P> P>
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
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
Ceci produit les résultats exacts que vous recherchez, sur vos données de démonstration. 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')