Sql Server 中在group by分组后,同时查询表中其它在select中的列,但不希望进行分组的数据...

本文介绍了如何在SQL中处理特定需求的分组查询问题,尤其是如何在使用group by时仍能获取到非分组字段的信息。通过示例展示了如何利用max和min函数解决这一难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近帮朋友处理一批数据,将指定的列重复的数据拿出来。这些数据在excel里。有10W条左右。由于EXCEL不好操作。就想着将数据导入数据库通过SQL语句来操作。

导入数据库成功了,但由于SQL不是很牛,所以查询有些问题。

我用group by 把重复的拿掉,但还有个问题,大家都知道用group by的话,select 后面指定的字段必须与group by后面的一致。group by 只有个别字段,如果拿出其他未分组的字段信息呢?在网上搜了下,

总结如下:
使用了group by 之后,就要求select后面的字段包含在group by 或聚合函数里面,这时如果想读取其它字段则无法实现。

将你需要的字段放进max或min函数中,max:支持字符类型、数字类型。

案例介绍

select 
max(id) as id,username,password from users
group by username,password 
order by id desc
declare @JWorkDatestart DATETIME,
@JWorkDateend DATETIME SET @JWorkDatestart ='{0}' SET @JWorkDateend = '{1}'
SELECT JWorkDate AS 工作日期,
dbo.JL_ProductionCenter.Name AS 生产中心,
dbo.JL_P_B_Equipment.Name AS 设备,
dbo.jzClassID.NAME AS 班次,
CASE
WHEN MIN(JType) = 1 THEN
MIN(jzSysUser.name)
ELSE null
END AS 接班人员,
CASE
WHEN MIN(JType) = 1 THEN
MIN(JDate)
ELSE null
END AS 接班时间,
CASE
WHEN MAX(JType) = 2 THEN
MAX(jzSysUser.name)
ELSE null
END AS 交班人员,
CASE
WHEN MAX(JType) = 2 THEN
MAX(JDate)
ELSE null
END AS 交班时间
FROM dbo.JL_DisklessWorkstation_Attendance
LEFT JOIN dbo.JL_P_B_Equipment
ON dbo.JL_P_B_Equipment.ID = dbo.JL_DisklessWorkstation_Attendance.JEquipmentID
LEFT JOIN dbo.JL_ProductionCenter
ON dbo.JL_ProductionCenter.ID = dbo.JL_P_B_Equipment.JProductionCenterID
LEFT JOIN dbo.jzClassID
ON dbo.jzClassID.ID = dbo.JL_DisklessWorkstation_Attendance.JClassID
LEFT JOIN dbo.jzSysUser
ON dbo.jzSysUser.ID = dbo.JL_DisklessWorkstation_Attendance.JUserID
WHERE datediff(day,JWorkDate,@JWorkDateend)>=0
AND datediff(day,@JWorkDatestart,JWorkDate)>=0
GROUP BY JWorkDate,dbo.JL_ProductionCenter.Name,dbo.JL_P_B_Equipment.Name,dbo.jzClassID.NAME
ORDER BY JWorkDate DESC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白菜!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值