使用具有不同条件的多个SQL select语句
我正在制作一份报告,为每位员工输出不同的统计数据。我的老板想看看发订单需要多长时间。我们是一家在线零售商,处理从单一商品到成百上千的订单。超过12项的订单被视为“批量”订单,其他订单被视为“小型”订单。用于计算的所有数据都来自同一个表,但提取数据的限制不同 这些是他想要收集的每一条数据的要求使用具有不同条件的多个SQL select语句,sql,Sql,我正在制作一份报告,为每位员工输出不同的统计数据。我的老板想看看发订单需要多长时间。我们是一家在线零售商,处理从单一商品到成百上千的订单。超过12项的订单被视为“批量”订单,其他订单被视为“小型”订单。用于计算的所有数据都来自同一个表,但提取数据的限制不同 这些是他想要收集的每一条数据的要求 SELECT AVG(bulkFTS) as bulkMODFTS FROM cartHead WHERE rateFactor <> -1 AND rateFactor <> 0
SELECT AVG(bulkFTS) as bulkMODFTS
FROM cartHead
WHERE rateFactor <> -1 AND rateFactor <> 0 AND bulkStartDate <> NULL
选择平均值(bulkFTS)作为bulkMODFTS
从车头
其中rateFactor-1和rateFactor 0以及bulkStartDate为NULL
选择count(idOrder)作为totalOrders
从车头
其中rateFactor-1
选择count(idOrder)作为overFTS
从车头
其中smallFTS>27,rateFactor-1,rateFactor 0,bulkGlassCount=''
选择四舍五入(总和(比率因子),1)作为总因子
从车头
其中rateFactor-1和rateFactor 0
选择轮(平均(FTStime),2)作为avgFTS
从车头
其中rateFactor-1和rateFactor 0以及bulkGlassCount=“”
它们还必须限制为“其中graphicsTeam=x和ordercompletedate介于date1和date2之间”
有没有一个简单的方法可以做到这一点?我试图将每一个都设置在自己的函数中,但它不仅需要花费难以置信的长时间来加载,而且无法持续工作。许多限制相互交叉,但每一个限制都需要不同的条件才能使数字准确。在一个查询中实现这一点。大概是这样的:
SELECT AVG(CASE WHEN bulkStartDate <> NULL THEN bulkFTS END) as bulkMODFTS,
count(idOrder) as totalOrders
count(case when rateFactor <> 0 AND smallFTS > 27 and bulkGlassCount = '' then idOrder end) as overFTS
round(SUM(CASE WHEN rateFactor <> 0 AND THEN rateFactor END), 1) as totalFactors,
ROUND(AVG(CASE WHEN rateFactor <> 0 AND bulkGlassCount = '' THEN FTStime END), 2) as avgFTS
FROM cartHead
WHERE rateFactor <> -1 AND
graphicsTeam = x AND ordercompletedate BETWEEN date1 AND date2"
选择平均值(bulkStartDate为空然后bulkFTS结束时的情况)作为bulkMODFTS,
将(idOrder)计数为totalOrders
计数(当rateFactor 0和smallFTS>27且bulkGlassCount=''时,则为idOrder end)作为溢出
四舍五入(总和(比率因子为0,然后比率因子结束时的情况),1)作为totalFactors,
四舍五入(平均值(rateFactor 0和bulkGlassCount=''然后FTStime END时的情况),2)作为平均GFTS
从车头
其中rateFactor-1和
GraphicsSteam=x和ordercompletedate在date1和date2之间”
您使用的是哪一个数据库?动态查询是一种方法。您使用的是哪一个数据库,您是如何提取数据的,以及您到底想做什么?您是想在一个表中获得所有结果,还是想让您在不同的条件下轻松获得单个结果?
SELECT count(idOrder) as overFTS
FROM cartHead
WHERE smallFTS > 27 AND rateFactor <> -1 AND rateFactor <> 0 AND bulkGlassCount = ''
SELECT round(sum(rateFactor),1) as totalFactors
FROM cartHead
WHERE rateFactor <> -1 AND rateFactor <> 0
SELECT ROUND(AVG(FTStime),2) as avgFTS
FROM cartHead
WHERE rateFactor <> -1 AND rateFactor <> 0 AND bulkGlassCount = ''
SELECT AVG(CASE WHEN bulkStartDate <> NULL THEN bulkFTS END) as bulkMODFTS,
count(idOrder) as totalOrders
count(case when rateFactor <> 0 AND smallFTS > 27 and bulkGlassCount = '' then idOrder end) as overFTS
round(SUM(CASE WHEN rateFactor <> 0 AND THEN rateFactor END), 1) as totalFactors,
ROUND(AVG(CASE WHEN rateFactor <> 0 AND bulkGlassCount = '' THEN FTStime END), 2) as avgFTS
FROM cartHead
WHERE rateFactor <> -1 AND
graphicsTeam = x AND ordercompletedate BETWEEN date1 AND date2"