Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.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
Sql 根据日期和条件合并表_Sql_Sql Server_Sql Server 2017 - Fatal编程技术网

Sql 根据日期和条件合并表

Sql 根据日期和条件合并表,sql,sql-server,sql-server-2017,Sql,Sql Server,Sql Server 2017,我有以下表格: DROP TABLE IF EXISTS t CREATE TABLE t ( id INT IDENTITY PRIMARY KEY, dt datetime, type int, grp int, typecol1 varchar(10), typecol2 varchar(10), typecol3 varchar(10), typecol4 varchar(10) ) INSERT INTO t (dt,

我有以下表格:

DROP TABLE IF EXISTS t

CREATE TABLE t
(
    id INT IDENTITY PRIMARY KEY,
    dt datetime,
    type int,
    grp int,
    typecol1 varchar(10),
    typecol2 varchar(10),
    typecol3 varchar(10),
    typecol4 varchar(10)
)

INSERT INTO t (dt,type,grp,typecol1,typecol2,typecol3,typecol4) 
VALUES
('2019-01-15',1,1,'A',null,null,null),
('2019-01-15',2,2,null,'B',null,null),
('2019-01-15',3,3,null,null,'C',null),
('2019-01-15',4,4,null,null,null,'D'),
('2019-02-15',1,1,'AA',null,null,null),
('2019-02-15',4,2,null,null,null,'DD'),
('2019-03-15',3,1,null,null,'CCC',null),
('2019-04-15',2,1,null,'BBBB',null,NULL);
此表中的类型为1,2,3,4。。这里日期和类型都是复合键

如果存在相同的日期,我需要将该行合并到一行 并仅基于以下条件进行合并

if same date & 
   type=1 then merge to typecol1
   type=2 then merge to typecol2
   type=3 then merge to typecol3
   type=4 then merge to typecol4
grp col基于日期的运行计数


尝试
分组方式

SELECT dt, MAX(typecol1) typecol1, MAX(typecol2) typecol2, MAX(typecol3) typecol3,
       MAX(typecol4) typecol4
FROM t
GROUP BY dt
输出

dt                  typecol1    typecol2    typecol3    typecol4
15/01/2019 00:00:00 A           B           C           D
15/02/2019 00:00:00 AA                                  DD
15/03/2019 00:00:00                         CCC 
15/04/2019 00:00:00             BBBB        

尝试按分组

SELECT dt, MAX(typecol1) typecol1, MAX(typecol2) typecol2, MAX(typecol3) typecol3,
       MAX(typecol4) typecol4
FROM t
GROUP BY dt
输出

dt                  typecol1    typecol2    typecol3    typecol4
15/01/2019 00:00:00 A           B           C           D
15/02/2019 00:00:00 AA                                  DD
15/03/2019 00:00:00                         CCC 
15/04/2019 00:00:00             BBBB        

您只需通过
ID
MAX()
聚合对其余列进行分组:

SELECT dt,MAX(typecol1) as typecol1,
          MAX(typecol2) as typecol2,
          MAX(typecol3) as typecol3,
          MAX(typecol4) as typecol4
  FROM t
 GROUP BY dt

您只需通过
ID
MAX()
聚合对其余列进行分组:

SELECT dt,MAX(typecol1) as typecol1,
          MAX(typecol2) as typecol2,
          MAX(typecol3) as typecol3,
          MAX(typecol4) as typecol4
  FROM t
 GROUP BY dt

我尝试过使用lead函数,但没有结果。但是我不知道如何基于类型执行lead添加您的问题尝试。我尝试过lead函数,但没有结果。但是我不知道如何基于类型执行lead添加您的问题尝试。感谢fr anwer。如果为空字符串,则varchar上的max col是否安全而不是null???@Ljt是安全,并且您不是通过比较来获取值,而是将值与
NULL
EMPTY
进行比较,因此,它将给您提供完美的结果。感谢fr anwer..is max col on varchar是安全的,如果不是null,如果是空字符串???@Ljt是安全的,您不会通过比较带来值,但您只是将值与
null
empty
进行比较,因此它将给您提供完美的结果。