私が望むのは、それが1つ以上を返す場合、MAX([年]) 行を削除して残りを返すことです。つまり、Cross Applyselect が 4 レコードを返す場合、レコードは 3 のみを返します。3 の場合は 2 のみを返します。2 の場合は 1 のみを返します。最良の方法は、コンマを別の文字 (# など) に変更することだと思います。右検索 # すべてを削除 右に続く。Cross Apply を使用しなかった場合、3 つの行を作成できます。 Row(1)18 ----John Smith ---- BA ---- College1 --- 1990 Row(2) 18----John Smith ---MS---- Univ1------2003 Row(3)18----John Smith ----BA ----Univ2 -----2010.... したい行 (3) は学生の最新/現在の学位情報であるため、削除します。現在ではなく、以前の学位、機関、年のみが必要です。おそらく Right(rtrim(最後のコンマの後のすべて) ですが、カウントする必要があります 以下はSQLです:
SELECT
DISTINCT
vw_name.personID AS personID,
vw_name.FullName AS FullName,
(CASE WHEN LEN(commaDegree) <= 2 THEN commaDegree ELSE LEFT(commaDegree,
LEN(commaDegree) - 1) END) AS commaDegree,
(CASE WHEN LEN(commaInst) <= 2 THEN commaInst ELSE LEFT(commaInst, LEN(commaInst) - 1) END)
AS commaInst,
(CASE WHEN LEN(commaYear) <= 2 THEN commaYear ELSE LEFT(commaYear, LEN(commaYear) - 1) END)
AS commaYear
FROM vw_name LEFT JOIN
vw_deg_all ON
vw_deg_all.personID = vw_name.personID
CROSS
APPLY
(SELECT isnull(degree.degree + N', ', N'')
FROM vw_deg_all LEFT JOIN
degree ON vw_deg_all.degreeID = degree.id
WHERE vw_deg_all.personID = vw_name.personID
ORDER BY vw_deg_all.[year] ASC FOR XML PATH('')) AS t (commaDegree)
CROSS APPLY
(SELECT isnull(institution.inst + N', ', N'')
FROM vw_deg_all LEFT JOIN
institution ON vw_deg_all.institutionID = institution.id
WHERE vw_deg_all.personID = vw_name.personID
ORDER BY vw_deg_all.[year] ASC FOR XML PATH('')) AS u(commaInst)
CROSS APPLY
(SELECT isnull(CONVERT(nvarchar, vw_deg_all.[year]) + N', ', N'')
FROM vw_deg_all
WHERE vw_deg_all.personID = vw_name.personID
ORDER BY vw_deg_all.[year] ASC FOR XML PATH('')) AS v(commaYear)
結果のクエリ
PersonID -- FullName -- コンマ Degree -- CommInst -- CommYear
18 -- ジョン・スミス -- 学士号、修士号、博士号 -- 大学 1、大学 1、大学 2 -- 1990 年、2003 年、2010 年
45 -- ポール・ライアン -- 学士号、修士号 -- 大学 15、大学 19 -- 1999 年、2008 年
134 -- シンディ・ジョーンズ -- BA -- College56 -- 1978
前の学位、機関、年のみを返したいです。最新ではありません。意味 PersonID 18 は、PHd、Univ2、2010 を削除します。PersonID 45 は、MS、Univ19、2008 を削除します。PersonID 134 は、1 つのレコードしかないため、そのまま残します。
これが理にかなっていることを願っています。前もって感謝します。