3
votes

Rejoignez l'aide dans SQL

J'ai 2 tables très simples à joindre mais il me manque un endroit où je n'obtiens pas le résultat souhaité:

Table # 1:

 entrez la description de l'image ici a>

Tableau n ° 2:

entrez la description de l'image ici

Résultat souhaité:

entrez la description de l'image ici

Query:

create table #temp1
(
     client_id int, 
     identifier int, 
     pp_id int,
     ch_id int,
     code varchar(20),
     program varchar(20),
     startdate date,
     enddate date, 
     ssc varchar(50)
)

insert into #temp1
values (9908,789654123,1567,1566,'OP','xASMT','1/1/2019','1/4/2019','A201901044F010134NNN01D               151 143 093 ')

create table #temp2
(
     client_id int, 
     identifier int, 
     pp_id int,
     ch_id int,
     code varchar(20), 
     program varchar(20),
     startdate date,
     enddate date, 
     ssc varchar(20)
)

insert into #temp2
values(9908,789654123,1574,1573,'OP','SU1','1/1/2019','1/4/2019',NULL)

--My query:
select 
    t1.client_id, t1.identifier, 
    concat(t1.code, t1.startdate, t1.enddate, t1.ssc),
    concat(t2.code, t2.startdate, t2.enddate, t2.ssc)
from 
    #temp1 t1
left join 
    #temp2 t2 on t1.client_id = t2.client_id and t1.identifier = t2.identifier

Je suis toujours un apprenant et pardonnez-moi s'il y a des erreurs ici. Avez-vous de l'aide?!


11 commentaires

Quel est le problème, qu'est-ce que vous obtenez qui est le problème?


REMARQUE: si des valeurs sont nulles et que vous créez une chaîne, la chaîne entière sera nulle


Ma requête ne me donne pas le résultat souhaité. J'ai besoin de 2 lignes d'enregistrements


Je concatène uniquement les dates et le SSC. Si quelque chose est nul, il sera signalé comme nul


Une jointure tentera de rejoindre les enregistrements et vous en donnera un pour chaque correspondance unique. Avez-vous besoin de faire une UNION à la place?


Ce n'est pas un JOIN, c'est une UNION.


Ouais. Juste figuré, UNION est utile. Existe-t-il un autre moyen d'accomplir cela avec JOIN?


@brad pas avec CONCAT, seulement avec +


@rick UNION fait croître les jeux de résultats verticalement, JOIN les fait croître horizontalement. Vous avez spécifiquement indiqué que vous souhaitiez une croissance verticale; pourquoi demandez-vous JOIN?


@caius merci. J'ai compris maintenant!


Je veux dire, vous POUVEZ le faire avec JOIN; Je publierai un exemple pour vous si vous voulez vraiment, vraiment ...


5 Réponses :


6
votes

Je ne pense pas que vous ayez besoin d'une jointure, mais vous avez besoin d'union:

select t1.client_id, t1.identifier, CONCAT(t1.code,t1.startdate,t1.enddate,t1.ssc)
from #temp1 t1
union all
select t2.client_id, t2.identifier, CONCAT(t2.code,t2.startdate,t2.enddate,t2.ssc)
from #temp2 t2

peut-être avez-vous besoin d'une partie where pour restreindre le résultat pour certaines lignes.
Voir la démo


0 commentaires

3
votes

Ce que vous semblez rechercher est une construction de sélection UNION , pas une jointure.

UNION renvoie les lignes d'une sous-requête et ajoute les lignes d'une autre sous-requête

Donc avec votre exemple

select t1.client_id, t1.identifier, CONCAT(t1.code,t1.startdate,t1.enddate,t1.ssc
from #temp1 t1 
where ... some condition ...
union all 
select t2.client_id, t2.identifier, concat(t2.code,t2.startdate,t2.enddate,t2.ssc)
from #temp2 t2 
where ... some condition ...

Voir la documentation ici: UNION


0 commentaires

2
votes

En ce qui concerne le résultat souhaité, je comprends que vous devez utiliser UNION ALL au lieu de joindre les tables.

Veuillez vérifier le script:

SELECT
    t1.client_id
   ,t1.identifier
   ,CONCAT(t1.code, t1.startdate, t1.enddate, t1.ssc)
   --,CONCAT(t2.code, t2.startdate, t2.enddate, t2.ssc)
FROM #temp1 t1
UNION ALL
SELECT 
    t2.client_id
   ,T2.identifier
   ,CONCAT(t2.code, t2.startdate, t2.enddate, t2.ssc)
FROM  #temp2 t2


0 commentaires

2
votes

Voici ce que j'utiliserais pour obtenir cette sortie:

select 
    t1.client_id, 
    t1.identifier, 
    CONCAT(t1.code,t1.startdate,t1.enddate,t1.ssc) ssc_concatenated
    --concat(t2.code,t2.startdate,t2.enddate,t2.ssc)

from #temp1 t1

union all

select 
    t2.client_id, 
    t2.identifier, 
    concat(t2.code,t2.startdate,t2.enddate,t2.ssc) ssc_concatenated
from #temp2 t2

Voici le db fiddle démo


0 commentaires

5
votes

Voici ce que vous NE FEREZ PAS, simplement publier parce que vous avez posé des questions sur JOIN. C'est certainement la mauvaise façon de procéder, mais:

acol bcol  COALESCE(acol, bcol)  result
----|-----|--------------------|--------
A1   null  COALESCE(A1, null)   -> A1
null B2    COALESCE(null, B1)   -> B1

Une jointure externe complète entre ces tables dans une condition impossible signifie que vous vous retrouvez avec un ensemble de résultats comme:

A OUTER JOIN B ON 1 = 0

Results:
A1   null
A2   null
null B1
null B2


0 commentaires