2017-04-27 92 views
0

大家好想知道,如果任何人都可以用下面的幫助:COUNT(DISTINCT(CASE時(「A」,「B」)

SELECT 
    HOST_ORDER_NO, 
    EARLIEST_PICK_DATE, 
    PRODUCT_NO, 
    PRODUCT_NUM_PARTS, 
    PRODUCT_WHS_LOCATION, 
    COUNT(DISTINCT(CASE 
    WHEN LEFT(PRODUCT_WHS_LOCATION,1) IN ('A','B','C','K','M','N') THEN 'BULK' 
    WHEN LEFT(PRODUCT_WHS_LOCATION,1) IN ('D','E','F') THEN 'TEN' 
    WHEN LEFT(PRODUCT_WHS_LOCATION,1) IN ('G','H','I','J','L') THEN 'TENSMALL' 
    ELSE 'SIP' END) AS 'ZONE', 
    MAX(COLLATION_INDICATOR), 
    COLLATION_GROUP_ID, 
    CASE WHEN COUNT(HOST_ORDER_NO)=1 THEN 'SingleOrder' ELSE 'MultiItem' END AS 'OrderType', 
    COUNT(*) AS 'ItemsInOrder', 
    YEARWEEK 
FROM wk19 
    WHERE YearWeek = '201717' 
    GROUP BY HOST_ORDER_NO 
    HAVING OrderType = 'MultiItem' 
    ORDER BY HOST_ORDER_NO, COLLATION_GROUP_ID, MAX(COLLATION_INDICATOR); 

我的錯誤是在的情況下statment我希望能夠到看看有多少不同領域的訂單從倉庫中來了。聲明的其餘部分工作正常,但如果我需要布雷克下來更多的我能做到的。

+0

你可以添加數據庫模式的?爲什麼你的列名全部大寫? – KarelG

+0

當數據庫管理員正在學習時,它來自一個非常古老的表格 –

回答

0

case表達就是缺少括號。 distinct之後不需要paren,所以:

COUNT(DISTINCT CASE WHEN LEFT(PRODUCT_WHS_LOCATION,1) IN ('A','B','C','K','M','N') THEN 'BULK' 
        WHEN LEFT(PRODUCT_WHS_LOCATION,1) IN ('D','E','F') THEN 'TEN' 
        WHEN LEFT(PRODUCT_WHS_LOCATION,1) IN ('G','H','I','J','L') THEN 'TENSMALL' 
        ELSE 'SIP' 
       END) AS ZONE, 

一個忠告:只使用單引號字符串和日期。不要將它們用於列別名。