2017-09-18 1 views
0

Dans les résultats de mon instruction sql (SQL Server 2016), je voudrais combiner deux lignes avec la même valeur dans deux colonnes ("study_id" et "study_start") en une ligne et conservez la ligne la plus haute dans une troisième cellule ("Id"). Si des colonnes (ie « app_id » ou « Date_arrival) dans la ligne avec higest Id est NULL, il doit prendre la valeur de la ligne avec le plus bas «Instruction SQL fusionner deux lignes en une seule

Je reçois le résultat ci-dessous Id »:.

 
Id  study_id study_start Code Expl  Desc  Startmonth App_id Date_arrival Efter_op Date_begin 
167262 878899   954 4.1 udd.ord Afbrudt feb  86666 21-06-2012  N   17-08-2012 
180537 878899   954  1 Afsluttet Afsluttet feb  NULL NULL   NULL  NULL 

Je voudrais obtenir ce résultat:

 
Id  study_id study_start Code Expl  Desc  Startmonth App_id Date_arrival Efter_op Date_begin 
180537 878899  954   1 Afsluttet Afsluttet feb  86666 21-06-2012  N   17-08-2012 

Ma déclaration ressemble à ceci:

SELECT dbo.PopulationStam_V.ELEV_ID AS id, 
dbo.PopulationStam_V.PERS_ID AS study_id, 
dbo.STUDIESTARTER.STUDST_ID AS study_start, 
dbo.Optagelse_Studiestatus.AFGANGSARSAG AS Code, 
dbo.Optagelse_Studiestatus.KORT_BETEGNELSE AS Expl, 
ISNULL((CAST(dbo.Optagelse_Studiestatus.Studiestatus AS varchar(20))), 'Indskrevet') AS 'Desc', 
dbo.STUDIESTARTER.OPTAG_START_MANED AS Startmonth, 
dbo.ANSOGNINGER.ANSOG_ID as App_id, 
dbo.ANSOGNINGER.ANKOMSTDATO AS Data_arrival', 
dbo.ANSOGNINGER.EFTEROPTAG AS Efter_op, 
dbo.ANSOGNINGER.STATUSDATO AS Date_begin 
FROM dbo.INSTITUTIONER 
INNER JOIN dbo.PopulationStam_V 
ON dbo.INSTITUTIONER.INST_ID = dbo.PopulationStam_V.SEMI_ID 
LEFT JOIN dbo.ANSOGNINGER 
ON dbo.PopulationStam_V.ELEV_ID = dbo.ANSOGNINGER.ELEV_ID 
INNER JOIN dbo.STUDIESTARTER 
ON dbo.PopulationStam_V.STUDST_ID_OPRINDELIG = dbo.STUDIESTARTER.STUDST_ID 
INNER JOIN dbo.UDD_NAVNE_T 
ON dbo.PopulationStam_V.UDDA_ID = dbo.UDD_NAVNE_T.UDD_ID 
INNER JOIN dbo.UDDANNELSER 
ON dbo.UDD_NAVNE_T.UDD_ID = dbo.UDDANNELSER.UDDA_ID 
LEFT OUTER JOIN dbo.PERSONER 
ON dbo.PopulationStam_V.PERS_ID = dbo.PERSONER.PERS_ID 
LEFT OUTER JOIN dbo.POSTNR 
ON dbo.PERSONER.PONR_ID = dbo.POSTNR.PONR_ID 
LEFT OUTER JOIN dbo.KønAlleElevID_V 
ON dbo.PopulationStam_V.ELEV_ID = dbo.KønAlleElevID_V.ELEV_ID 
LEFT OUTER JOIN dbo.Optagelse_Studiestatus 
ON dbo.PopulationStam_V.AFAR_ID = dbo.Optagelse_Studiestatus.AFAR_ID 
LEFT OUTER JOIN dbo.frafaldsmodel_adgangsgrundlag 
ON dbo.frafaldsmodel_adgangsgrundlag.ELEV_ID = dbo.PopulationStam_V.ELEV_ID 
LEFT OUTER JOIN dbo.Optagelse_prioriteterUFM 
ON dbo.Optagelse_prioriteterUFM.cpr = dbo.PopulationStam_V.CPR_NR 
AND dbo.Optagelse_prioriteterUFM.Aar = dbo.frafaldsmodel_adgangsgrundlag.optagelsesaar 
LEFT OUTER JOIN dbo.frafaldsmodel_stoettetabel_uddannelser AS fsu 
ON fsu.id_uddannelse = dbo.UDDANNELSER.UDDA_ID 
AND fsu.id_inst = dbo.INSTITUTIONER.INST_ID 
AND fsu.uddannelse_aar = dbo.frafaldsmodel_adgangsgrundlag.optagelsesaar 
WHERE dbo.STUDIESTARTER.STUDIESTARTSDATO > '2012-03-01 00:00:00.000' 
AND (dbo.Optagelse_Studiestatus.AFGANGSARSAG IS NULL 
OR dbo.Optagelse_Studiestatus.AFGANGSARSAG NOT LIKE '2.7.4') 
AND (dbo.PopulationStam_V.INDSKRIVNINGSFORM = '1100' 
OR dbo.PopulationStam_V.INDSKRIVNINGSFORM = '1700') 
GROUP BY dbo.PopulationStam_V.ELEV_ID, 
dbo.PopulationStam_V.PERS_ID, 
dbo.STUDIESTARTER.STUDST_ID, 
dbo.Optagelse_Studiestatus.AFGANGSARSAG, 
dbo.Optagelse_Studiestatus.KORT_BETEGNELSE, 
dbo.STUDIESTARTER.OPTAG_START_MANED, 
Studiestatus, 
dbo.ANSOGNINGER.ANSOG_ID, 
dbo.ANSOGNINGER.ANKOMSTDATO, 
dbo.ANSOGNINGER.EFTEROPTAG, 
dbo.ANSOGNINGER.STATUSDATO 

I J'espère vraiment que quelqu'un là-bas peut aider.

+1

S'il vous plaît modifier votre question et de montrer une requête minimale. Incluez votre sortie actuelle et attendue en tant que _text_ dans votre question. –

+0

vous semblez être nouveau ici, je recommande de passer par le lien ci-dessous (spaghettidba.com/2015/04/24/...) pour en savoir plus sur la façon de poser des questions, vous obtiendrez une réponse plus rapide et à long terme, il aidera vous beaucoup – TheGameiswar

+0

Nous vous remercions de votre aide. Je vais l'éditer demain, quand j'ai le temps. –

Répondre

0

De nombreuses façons, cela fonctionne:

WITH subSource AS (
/* Your query here */ 
) 
SELECT 
    s1.id, 
    /* all other columns work like this: 
    COALESCE(S1.column,s2.column) 
    for example: */ 
    coalesce(s1.appid,s2.appid) as appid 
FROM subSource s1 
INNER JOIN subSource s2 
ON s1.study_id =s2.study_id 
    and s1.study_start = s2.study_start 
    AND s1.id > s2.id 
    /* I imagine some other clauses might be needed but maybe not */ 

Le reste est copier coller

+1

Merci beaucoup! J'ai hâte d'essayer ça demain. J'accepterai la réponse après l'avoir essayée. –