2017-04-27 16 views
0

Hallo jeder fragte sich, ob jemand mit dem unten helfen könnte:COUNT (DISTINCT (CASE WHEN IN ('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); 

Mein Fehler ist in dem Fall statment ich in der Lage sein wollen sehen, wie viele verschiedene Bereiche die Bestellungen kommen aus mit im Lager. der Rest der Aussage funktioniert gut, aber wenn ich breck brauche es mehr nach unten ich tun kann.

+0

Können Sie die DB-Schemas hinzufügen? Und warum sind Ihre Spaltennamen in Großbuchstaben? – KarelG

+0

Es ist von einem sehr alten Tisch, als der DB-Admin lernte –

Antwort

0

Ihre caseAusdruck nur fehlt Klammern. Nach distinct ist kein paren erforderlich, also:

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, 

Ein Ratschlag: Verwenden Sie nur einfache Anführungszeichen für Zeichenfolgen und Daten. Verwenden Sie sie nicht für Spaltenaliasnamen.