2017-09-18 3 views
0

내 sql-statement (SQL Server 2016)의 결과에서 한 행에 두 개의 열 ("study_id"및 "study_start")에서 동일한 값을 가진 두 개의 행을 결합하고 싶습니다. 세 번째 셀 ("Id")에 가장 높은 값의 행을 유지하십시오. 모든 열 (즉, "APP_ID"또는 경우 아이디 ""higest ID를 가진 행의 Date_arrival)이 NULL이고, 다음은 가장 낮은 행에서 값을 취해야한다 "SQL 문을 두 행을 하나로 병합

을 나는 아래의 결과를 얻을 :.

 
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 

그리고이 결과를 좀하고 싶습니다 :

 
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 

내 문은 다음과 같습니다

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 누군가가 도울 수 있기를 바랍니다.

+1

입니다. 질문에 현재 및 예상 결과를 _ 텍스트 _ 포함하십시오. –

+0

당신은 여기 새로운 것 같습니다, 나는 아래 링크 (spaghettidba.com/2015/04/24/...)를 통해 질문하는 방법에 대해 더 많이 알고, 당신은 더 빠른 응답을 얻을 것이고 장기적으로 도움이 될 것입니다. 너 많이. – TheGameiswar

+0

안내해 주셔서 감사합니다. 나는 시간이있을 때 그것을 편집 할 것이다. –

답변

0

많은 방법이 작동합니다 :

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 */ 

나머지는 질문을 편집하고 최소한의 쿼리를 제시해주십시오 복사 붙여 넣기

+1

대단히 고마워요! 나는 이것을 tommorow로 시험해보기를 고대한다. 나는 그것을 시도한 후에 대답을 받아 들일 것이다. –

관련 문제