2017-04-27 69 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 
相關問題