не удается определить условие

#sql-server #coldfusion

#sql-server #coldfusion

Вопрос:

я пытаюсь определить условие SR.PRODUCT_STOCK2 > 0 внутри кода sql, поскольку оно AS имеет условие суммы, вот код sql

     SELECT P.PRODUCT_ID,P.PRODUCT_NAME,PS.MONEY,PR.PRICE,P.BRAND_ID,PS.PRICE,GSL.PRODUCT_STOCK,GSL.PURCHASE_ORDER_STOCK,GSL.SALEABLE_STOCK,P.PRODUCT_DETAIL2,P.BARCOD
<cfif isdefined('attributes.department_id') and len(attributes.department_id)>
    ,(SUM(SR.STOCK_IN)-SUM(SR.STOCK_OUT)) AS PRODUCT_STOCK2
</cfif>
FROM PRODUCT P
    JOIN PRICE_STANDART PS ON P.PRODUCT_ID = PS.PRODUCT_ID
    JOIN PRICE PR ON P.PRODUCT_ID = PR.PRODUCT_ID
    JOIN #DSN2_ALIAS#.GET_STOCK_LAST GSL ON P.PRODUCT_ID = GSL.PRODUCT_ID
    <cfif isdefined('attributes.department_id') and len(attributes.department_id)>
        JOIN #DSN2_ALIAS#.STOCKS_ROW SR ON P.PRODUCT_ID=SR.PRODUCT_ID
    </cfif>
WHERE PS.PURCHASESALES=1 AND PS.PRICESTANDART_STATUS=1 AND P.IS_SALES=1 AND P.IS_PURCHASE=1 AND P.IS_INTERNET=1 AND P.IS_EXTRANET=1
<cfif isdefined('attributes.department_id') and len(attributes.department_id)>
    AND
        (
        <cfloop list="#attributes.department_id#" delimiters="," index="dept_i">
        (SR.STORE = #listfirst(dept_i,'-')# AND SR.STORE_LOCATION = #listlast(dept_i,'-')#)
        <cfif dept_i neq listlast(attributes.department_id,',') and listlen(attributes.department_id,',') gte 1> OR</cfif>
        </cfloop>  
        )
        <cfif isdefined('attributes.is_stock') and attributes.is_stock is 1>
            AND SR.PRODUCT_STOCK2 > 0
        </cfif>
    </cfif>
GROUP BY P.PRODUCT_ID,PR.PRICE,P.PRODUCT_NAME,PS.MONEY,P.BRAND_ID,PS.PRICE,GSL.PRODUCT_STOCK,GSL.PURCHASE_ORDER_STOCK,GSL.SALEABLE_STOCK,P.PRODUCT_DETAIL2,P.BARCOD
 

в журнале ошибок написано: Недопустимое имя столбца PRODUCT_STOCK2 я знаю, что неправильно определил условие, я просто не знаю, как правильно его определить, нужна помощь! Спасибо всем за помощь!

Ответ №1:

Вам придется использовать предложение having следующим образом:

 HAVING (SUM(SR.STOCK_IN)-SUM(SR.STOCK_OUT)) > 0
 

Комментарии:

1. Как выглядит ваш новый запрос?

2. все то же самое, за исключением AND SR.PRODUCT_STOCK2 > 0 того, что вместо HAVING (SUM(SR.STOCK_IN)-SUM(SR.STOCK_OUT)) > 0

3. Наличие должно быть после предложения Group by . Таким образом, ваш запрос завершится так: GROUP BY P.PRODUCT_ID,PR.PRICE,P.PRODUCT_NAME,PS.MONEY,P.BRAND_ID,PS.PRICE,GSL.PRODUCT_STOCK,GSL.PURCHASE_ORDER_STOCK,GSL.SALEABLE_STOCK,P.PRODUCT_DETAIL2,P. ШТРИХ-КОД, ИМЕЮЩИЙ (SUM(SR.STOCK_IN)-СУММА(SR.STOCK_OUT)) > 0

4. СПАСИБО 🙂 я написал такой sql-код, но не знаю основ ))