前言
运营想要导出新能源项目的从今年1月份到现在的所有订单的数据,开始后台管理界面上有导出功能,但是导出的话因为只能选择当前页,所以不能全部导出,不想要一个个点击导出,后来运营就找到了产品,产品就找到了我们,让我们直接写个sql,让项目组长连接生产上的数据库执行sql,从navicat再把查到的数据导成excel或者csv格式的
推荐博客
case when then else多个条件_SQL高级知识——CASE_新文达·小文姐姐的博客-CSDN博客
SQL -利用Case When Then Else End 多条件判断 - Be-myself - 博客园 (cnblogs.com)
SQL中CASE 的用法 转载 - maanshancss - 博客园 (cnblogs.com)
利用Case When Then多条件判断 - 馨馨妙 - 博客园 (cnblogs.com)
mysql实现跨库查询 - 西北西南 - 博客园 (cnblogs.com)
left join 基本用法_wheredata的博客-CSDN博客
navicat如何导出查询结果数据成excel-百度经验 (baidu.com)
sql语句中直接将时间戳转化为时间格式_nuc_badaomen的博客-CSDN博客
需求
要导出的数据需要从两个数据库里混合得到,因为要导出的数据里有省和市的名称,所以要从baseconfigservice数据库里根据provinceCode从province表里拿到省名称和用cityCode从city表里拿到城市名称,剩下就是订单的一些数据了,包括订单的一些基础数据要从orderservice数据库里的orders表里拿到,订单的支付数据要从orderservice库里的ordercost表里拿到,此时所有的数据拿到,条件是要拿创建时间从今年1月份到现在为止的所有订单
涉及到的东西:
数据库 2个 baseconfigservice orderservice
表 4个 province、city orders、ordercost
关系 orders表的主键是ordercost的外键(虽然没有实际建外键)
条件 今年1月份<= 订单创建时间 <=现在时间
多数据库表查询+left join用法 + sql中的case when then end用法 + 把10位数的时间戳转换成时间格式+navicat将查询结果以excel或csv格式导出
过程
要导出的格式如下
表如下:
orderStatus订单状态数据库表中存的是int类型,要转成对应的名称---------》case when then end
gmtCreate创建时间存的是10位的时间戳,要转成对应的时间格式--------》10位时间戳转时间格式
sql如下
SELECT
o.orderNo AS "订单编号",
o.interestedCarName AS "咨询车型",
p.name AS "省份",
ct.name AS "城市",
o.memberName AS "客户名称",
o.tel AS "联系电话",
(
CASE
o.orderStatus
WHEN 100 THEN
"待联系"
WHEN 110 THEN
"联系中"
WHEN 120 THEN
"待支付"
WHEN 125 THEN
"支付中"
WHEN 130 THEN
"待提车"
WHEN 140 THEN
"待退款"
WHEN 150 THEN
"退款中"
WHEN 160 THEN
"已退款"
WHEN 200 THEN
"已成交"
WHEN 210 THEN
"已关闭" ELSE ""
END
) AS "订单状态",
c.prePayment AS "订金金额",
FROM_UNIXTIME(o.gmtCreate,'%Y-%m-%d %H:%i:%s') AS "创建时间",
FROM_UNIXTIME(o.gmtModified,'%Y-%m-%d %H:%i:%s') AS "更新时间",
FROM_UNIXTIME(c.paymentTime,'%Y-%m-%d %H:%i:%s') As "支付定金时间",
FROM_UNIXTIME(o.dealTime,'%Y-%m-%d %H:%i:%s') as "成交时间",
o.accountName AS "订单负责人",
o.recommendId AS "推广员ID",
o.followRemark AS "备注"
FROM
orderservice.orders o left join
orderservice.ordercost c
on o.id = c.orderId left join
baseconfigservice.province p
on o.provinceCode = p.code left join
baseconfigservice.city ct
on o.cityCode = ct.code
WHERE
c.orderId in( SELECT id FROM orders WHERE gmtCreate >= 1609430410
AND gmtCreate <= UNIX_TIMESTAMP( ))
最终导成的结果如下
明日再补!!!