2017-09-18 13 views
0

my sql-statement(SQL Server 2016)の結果では、2つの列( "study_id"と "study_start")を同じ値で2つ組み合わせて1つの行にしたいと思います。 3番目のセル( "Id")に最も高い値の行を保持します。任意の列(すなわち「APP_ID」または場合は、id 『「higest IDで行のDate_arrival)がNULLである、それは最低で行から値を取るべき』SQL文は2行を1つにマージする

を私は以下の結果を得る:。

 
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

です。あなたの質問の中に_text_として現在の出力と期待される出力を含めてください。 –

+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をこれを試すことを楽しみにしています。私はそれを試した後、私は答えを受け入れるだろう。 –

関連する問題