sqlserver第一次入库和第一次出库怎么合并成一行

这个困扰太久了,第一次入库和第一次出库怎么合并成一行呢(stuff把他变成一个格子里 要求是一行)感谢

img

该回答内容部分引用GPT,GPT_Pro更好的解决问题
SQL Server中可以使用Stuff函数来合并第一次入库和第一次出库的数据,Stuff函数可以将一列中的多个值合并成一行,使用它可以实现将入库和出库合并成一行的目的。具体实现步骤如下:

  1. 在SQL Server中新建一个表,用来存放第一次入库和第一次出库的数据;
  2. 使用Stuff函数将第一次入库和第一次出库的数据合并成一行;

SELECT STUFF((SELECT ','+CONVERT(VARCHAR(10), 入库时间) + '|' + CONVERT(VARCHAR(10), 出库时间) FROM 表A FOR XML PATH('')),1,1,'') as 合并后的数据

  1. 根据需要,将上述语句放入INSERT语句中,将合并后的入库和出库数据写入新建表中;
  2. 通过SELECT语句可以查看新建表中的数据。

通过以上步骤,就可以实现将第一次入库和第一次出库的数据合并到一行中。
如果回答有帮助,望采纳。

先用 row_number 按单号和日期类型分组排上序号,然后列转行

不懂可以加我咨询,若有帮助,望给个采纳,谢谢!
1、解决方法如下

img

-- 先按通知单号进行分组
select noticeNo from noticeTable group by noticeNo

-- 分组后,且查询入库时间最小值(就是第一次入库时间)
select noticeNo,min(inTime) inTime from noticeTable group by noticeNo

-- 分组后,且查询出库时间最小值(就是第一次出库时间)
select noticeNo,min(outTime) outTime from noticeTable group by noticeNo


-- 根据单号查询出第一次入库和第一次出库情况
select a.noticeNo,a.inTime,b.outTime
from(
    select noticeNo,min(inTime) inTime from noticeTable group by noticeNo
) a
left join (
    select noticeNo,min(outTime) outTime from noticeTable group by noticeNo
) b on b.noticeNo=a.noticeNo

创建表


create table noticeTable
(
    num int,
    noticeNo nvarchar(50),
    userName nvarchar(50),
    orderTime datetime,
    authTime datetime,
    inTime datetime,
    outTime datetime
)

模拟数据


-- 新塘尚亿
insert into noticeTable(num,noticeNo,userName,orderTime,authTime,inTime,outTime)
values
(0,'1N30222350','新塘尚亿','2023-02-22 15:49:00','2023-02-22 15:49:00',NULL,'2023-02-22 16:21:00'),
(0,'1N30222350','新塘尚亿','2023-02-22 15:49:00','2023-02-22 15:49:00',NULL,'2023-02-22 16:23:00'),
(0,'1N30222350','新塘尚亿','2023-02-22 15:49:00','2023-02-22 15:49:00','2023-02-22 16:20:00',NULL)

-- 新塘腾飞
insert into noticeTable(num,noticeNo,userName,orderTime,authTime,inTime,outTime)
values
(0,'1N30222351','新塘腾飞','2023-02-24 09:25:00','2023-02-24 09:25:00',NULL,'2023-02-24 09:31:00'),
(0,'1N30222351','新塘腾飞','2023-02-24 09:25:00','2023-02-24 09:25:00',NULL,'2023-02-24 09:33:00'),
(0,'1N30222351','新塘腾飞','2023-02-24 09:25:00','2023-02-24 09:25:00','2023-02-24 09:30:00',NULL)

1、表结构和具体需求不太清楚,根据截图给个SQL思路:

SELECT DISTINCT 序号, 通知单号, 客户简称, 下单日期, 审核日期
      , FIRST_VALUE( 入库日期 ) OVER( PARTITION BY 序号, 通知单号, 客户简称, 下单日期, 审核日期 ORDER BY 入库日期 ) AS 入库日期
      , FIRST_VALUE( 出库日期 ) OVER( PARTITION BY 序号, 通知单号, 客户简称, 下单日期, 审核日期 ORDER BY 出库日期 ) AS 出库日期
  FROM tbl