2017-04-27 64 views
0

我有一个查询获取一组显示货架位置以及货架是否正在使用的结果。货架布局如下:“A1XXX01,A1XXX02”,然后移动到A2等。截图波纹管显示的结果集我目前得到回来,我要的方式对数据进行排序,它这样表示:SQL对列1进行排序并添加第2列中的所有值

location amountUsed amountFree 
    A1   200   100 
    A2   100   500 
    B1   520   100 

这是查询我有这么远,一小片的截图数据也回来

SELECT 
wl.location, 
CASE WHEN COALESCE(SUM(quantity), 0) = 0 THEN 0 ELSE 1 END as isUsed 
FROM warehouse_locations as wl LEFT JOIN 
    product_stock_warehouse as psw 
    ON psw.location = wl.location 
WHERE wl.unitId_unitId LIKE '1' 
GROUP BY wl.location 
order by wl.location 

enter image description here

的“isUsed”列为1表明该架正在使用中,0表明它是免费的

+0

你能不能给我们你的表定义和数据的几个例子了一些调整后的加工代码? – Hybris95

+0

@kieronoates A11有可能吗? –

+0

@JibinBalachandran它被格式化为“AXXXXX”作为递增数字,所以可以,但A1意味着它在位置1的仓库A中,其余的字符串递增为001A,001B,001C,002A等等 –

回答

0

有人把一个答案,但不久后删除它和它的工作,这里是

SELECT substring(location, 1, 2) as location, 
    count(case when isUsed = 1 then location END) as amountUsed, 
    count(case when isUsed = 0 then location END) as amountFree, 
    count(isUsed) as totalShelves 
FROM (
      SELECT wl.location, 
        CASE WHEN COALESCE(SUM(quantity), 0) = 0 THEN 0 ELSE 1 END as isUsed 
      FROM warehouse_locations as wl 
      LEFT JOIN 
        product_stock_warehouse as psw 
      ON  psw.location = wl.location 
      WHERE wl.unitId_unitId LIKE '1' 
      GROUP BY wl.location 
     ) t1 
GROUP BY substring(location, 1, 2) 
ORDER BY substring(location, 1, 2) 
4
SELECT 
LEFT(wl.location,2) as shelf, 
SUM(CASE WHEN COALESCE(SUM(quantity), 0) = 0 THEN 0 ELSE 1 END) as isUsed, 
SUM(CASE WHEN COALESCE(SUM(quantity), 0) = 0 THEN 1 ELSE 0 END) as isNotUsed 

FROM warehouse_locations as wl LEFT JOIN 
    product_stock_warehouse as psw 
    ON psw.location = wl.location 
WHERE wl.unitId_unitId LIKE '1' 
GROUP BY LEFT(wl.location,2) 
order by LEFT(wl.location,2) 

假设货架总是采用2字符格式。

P.S.你可能忘记了这部分的通配符?

wl.unitId_unitId LIKE '1' 如果你还没有,而且它确实就是这样。你可以改变它到wl.unitId_unitId = '1'

0

因此,看着你的问题,它似乎你想分组结果的'位置'的前2个字符。然后,您只需稍微调整案例陈述。这是未经测试的,可能有更好的方法,但我认为这应该或多或少的工作。

SELECT 
LEFT(wl.location, 2) as Location, --Gets first 2 characters 
SUM(CASE WHEN COALESCE(SUM(quantity), 0) = 0 THEN 0 ELSE 1 END) as TotalUsed, --Get a sum of total used 
SUM(CASE WHEN COALESCE(SUM(quantity), 0) = 0 THEN 1 ELSE 0 END) as TotalUnused, --Get a sum of total unused 
FROM warehouse_locations as wl LEFT JOIN 
product_stock_warehouse as psw 
ON psw.location = wl.location 
WHERE wl.unitId_unitId LIKE '1' 
GROUP BY SUBSTR(wl.location, 1, 2) 
ORDER by Location 
相关问题