Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多行合并为单行,并使用sql、函数或。。。在DB2中_C#_Sql_Db2 - Fatal编程技术网

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 |