C# 将多行合并为单行,并使用sql、函数或。。。在DB2中
我需要你的帮助,我有下面的原始数据C# 将多行合并为单行,并使用sql、函数或。。。在DB2中,c#,sql,db2,C#,Sql,Db2,我需要你的帮助,我有下面的原始数据 Student Name Period Class _____________________________ Samnang 2019-03-31 0 Samnang 2019-05-31 1 Samnang 2019-08-31 2 Samnang 2019-0
Student Name Period Class
_____________________________
Samnang 2019-03-31 0
Samnang 2019-05-31 1
Samnang 2019-08-31 2
Samnang 2019-09-30 3
Samnang 2019-10-31 4
我希望下面的结果使用Sql、函数或。。。在DB2中:
注:缺少的月份将替换为M任务月
Student Name Class
__________________________
Samnang 0M1MM234
显示您迄今为止尝试过的代码HI,欢迎来到stackoverflow,请检查并通过添加详细信息/代码编辑您的问题。
WITH
Student (Name, Period, Class) AS
(
VALUES
('Samnang', DATE('2019-03-31'), 0)
, ('Samnang', DATE('2019-05-31'), 1)
, ('Samnang', DATE('2019-08-31'), 2)
, ('Samnang', DATE('2019-09-30'), 3)
, ('Samnang', DATE('2019-10-31'), 4)
, ('Samnang1', DATE('2019-01-31'), 0)
, ('Samnang1', DATE('2019-03-31'), 1)
, ('Samnang1', DATE('2019-07-31'), 2)
)
,
DATE_RANGE AS
(
SELECT
Name
, MIN(PERIOD) - (DAY(MIN(PERIOD)) - 1) DAYS PERIOD_MIN
, MAX(PERIOD) - (DAY(MAX(PERIOD)) - 1) DAYS PERIOD_MAX
FROM student
GROUP BY Name
)
, T (NAME, PERIOD, PERIOD_MAX, PERIOD_YEAR, PERIOD_MONTH) AS
(
SELECT NAME, PERIOD_MIN, PERIOD_MAX, YEAR(PERIOD_MIN), MONTH(PERIOD_MIN)
FROM DATE_RANGE
UNION ALL
SELECT NAME, PERIOD + 1 MONTH, PERIOD_MAX, YEAR(PERIOD + 1 MONTH), MONTH(PERIOD + 1 MONTH)
FROM T
WHERE PERIOD < PERIOD_MAX
)
SELECT T.NAME, LISTAGG(COALESCE(TRIM(CHAR(S.CLASS)), 'M')) WITHIN GROUP (ORDER BY T.PERIOD_YEAR, T.PERIOD_MONTH) CLASS
FROM T
LEFT JOIN STUDENT S ON S.NAME = T.NAME AND YEAR(S.PERIOD) = T.PERIOD_YEAR AND MONTH(S.PERIOD) = T.PERIOD_MONTH
GROUP BY T.NAME;
|NAME |CLASS |
|--------|--------|
|Samnang |0M1MM234|
|Samnang1|0M1MMM2 |