Ошибка SQL при использовании ПОДОБНОГО СЛУЧАЯ, КОГДА с подзапросом

#sql #excel #parameters

#sql #excel #параметры

Вопрос:

Я пытаюсь написать инструкцию SQL, которая использует параметры Excel для вставки данных через выпадающее меню. Обычно это отлично работает, но я думаю, потому что я использую подзапрос в этом случае, я получаю ошибку «Не удалось привязать многосоставный идентификатор». Подзапрос используется для создания суммы количества товара, купленного за последнюю неделю. Вот код:

 SELECT DISTINCT ITMMASTER.ITMREF_0 AS ITEMCODE, ITMMASTER.ITMDES1_0 AS ITEMDESC, Sum(ITMMVT.PHYSTO_0) AS AVAILSTOCK, Sum(ITMMVT.ORDSTO_0) AS ONORDER, Sum(ITMMVT.PHYALL_0) AS ALLOCATED, Sum(ITMFACILIT.MAXSTO_0) AS MAX,
    INVQTY = (SELECT Sum(SINVOICED.QTY_0) AS INVQTY  
        FROM x3v11.PROD.SINVOICED SINVOICED 
        WHERE SINVOICED.INVDAT_0 BETWEEN DATEADD(WEEK,-1,DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)) 
            AND DATEADD(DAY,4,DATEADD(WEEK,-1,DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)))
            AND SINVOICED.ITMREF_0 = ITMMASTER.ITMREF_0
    ), 
ITMMASTER.ITMWEI_0 AS WEIGHT, ITMCOST.CSTTOT_0 AS COST, ITMBPS.BPSNUM_0 AS VENDOR, BPSUPPLIER.BPSNAM_0 AS VENDNAME, ITMMASTER.TSICOD_2 AS CAT
FROM x3v11.PROD.ITMMASTER ITMMASTER
    LEFT OUTER JOIN x3v11.PROD.ITMMVT ITMMVT ON ITMMASTER.ITMREF_0 = ITMMVT.ITMREF_0
    LEFT OUTER JOIN x3v11.PROD.ITMFACILIT ITMFACILIT ON ITMMVT.ITMREF_0 = ITMFACILIT.ITMREF_0 AND ITMMVT.STOFCY_0 = ITMFACILIT.STOFCY_0
    LEFT OUTER JOIN x3v11.PROD.ITMCOST ITMCOST ON ITMMVT.ITMREF_0 = ITMCOST.ITMREF_0  AND ITMMVT.STOFCY_0 = ITMCOST.STOFCY_0
    LEFT OUTER JOIN x3v11.PROD.ITMBPS ITMBPS ON ITMMASTER.ITMREF_0 = ITMBPS.ITMREF_0
    LEFT OUTER JOIN x3v11.PROD.BPSUPPLIER BPSUPPLIER ON ITMBPS.BPSNUM_0 = BPSUPPLIER.BPSNUM_0
WHERE ITMCOST.STOFCY_0 <> '115'
    AND ITMFACILIT.MAXSTO_0 <> 0
    AND ITMBPS.PIO_0 <> 99
    AND ITMBPS.BPSNUM_0 LIKE CASE WHEN ? IS NOT NULL THEN ? ELSE '%' END
GROUP BY ITMMASTER.ITMREF_0, ITMMASTER.ITMDES1_0, ITMMASTER.ITMWEI_0, ITMCOST.CSTTOT_0, ITMBPS.BPSNUM_0, BPSUPPLIER.BPSNAM_0, ITMMASTER.TSICOD_2
ORDER BY ITMMASTER.ITMREF_0
  

Ответ №1:

Я думаю, что вы неправильно указали синтаксис для подзапроса:

 INVQTY = (SELECT Sum(SINVOICED.QTY_0) AS INVQTY  
    FROM x3v11.PROD.SINVOICED SINVOICED 
    WHERE SINVOICED.INVDAT_0 BETWEEN 
DATEADD(WEEK,-1,DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)) 
        AND DATEADD(DAY,4,DATEADD(WEEK,-1,DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)))
        AND SINVOICED.ITMREF_0 = ITMMASTER.ITMREF_0
),
  

Я думаю, что это должно быть:

 (SELECT Sum(SINVOICED.QTY_0) 
    FROM x3v11.PROD.SINVOICED SINVOICED 
    WHERE SINVOICED.INVDAT_0 BETWEEN 
DATEADD(WEEK,-1,DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)) 
        AND DATEADD(DAY,4,DATEADD(WEEK,-1,DATEADD(WEEK,DATEDIFF(WEEK,0,GETDATE()),0)))
        AND SINVOICED.ITMREF_0 = ITMMASTER.ITMREF_0
) AS INVQTY,
  

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

1. К сожалению, это, похоже, не имеет никакого значения. Если я полностью удалю подзапрос, оператор будет работать так, как ожидалось, и до того, как я попытался добавить эту выпадающую функцию, все работало отлично, но что-то о сочетании подзапроса и ПОДОБНОГО СЛУЧАЯ, КОГДА? ТОГДА ЭТО НЕ NULL? ЕЩЕ ‘%’ END вызывает эту ошибку. Спасибо за ваше предложение независимо.