SQL Server «Имя столбца не было указано», но это было

#sql-server #excel #microsoft-query

Вопрос:

У меня есть запрос, который выполняется в SQL Server (с использованием Visual Studio 19), но когда я пытаюсь запустить его с помощью Microsoft Query в Excel, я получаю сообщение об ошибке

«Имя столбца не было указано для столбца 5 «bv».
«Имя столбца не было указано для столбца 6 «bv».
«Имя столбца не было указано для столбца 7 «bv».
Не удалось подготовить заявление(заявления).

введите описание изображения здесь

Как вы можете видеть ниже, я использую псевдонимы столбцов 5, 6 и 7 (Штук, значение пакета, Множитель). Кроме того, тот факт, что этот запрос выполняется в Visual Studio, указывает на то, что я не ошибся в этом вопиюще.

 WITH bv AS 
(
    SELECT 
         b.BatchID, b.BatchDate, b.BatchName, b.Price AS Cost, 
         SUM(bh.QtyFound) AS Pieces, 
         SUM(ps.StrategyPrice * QtyFound) AS BatchValue, 
         IIF(b.Price = 0, 0, SUM(ps.StrategyPrice * QtyFound) / b.Price) AS Multiplier,
         b.Active 
     FROM 
         Inventory.Batches b
     JOIN 
         Inventory_Item_History_Summary bh ON b.BatchID = bh.BatchID
     JOIN 
         Selling.Price_Strategy_Table ps ON LEFT(bh.ItemType, 1) = LEFT(ps.ItemType, 1) 
                                         AND bh.ItemNum = ps.ItemNo 
                                         AND bh.ColorID = ps.Color 
                                         AND bh.BLCond = ps.Cond
     GROUP BY 
         b.BatchID, b.BatchDate, b.BatchName, Price, Active
)
SELECT 
    SUM(p.StrategyPrice * h.QtyFound) / SUM(p.StrategyPrice * IIF(bv.Multiplier = 0, 0, h.QtyFound / bv.Multiplier)) AvgMultiplier
FROM 
    Inventory.Locations l
JOIN 
    Inventory_Item_History_Summary h ON h.LocationID = l.LocationID 
JOIN 
    Selling.Price_Strategy_Table p ON LEFT(h.ItemType, 1) = LEFT(p.ItemType, 1) 
                                   AND h.ItemNum = p.ItemNo 
                                   AND h.ColorID = p.Color 
                                   AND h.BLCond = p.Cond
JOIN 
    bv ON h.BatchID = bv.BatchID 
WHERE 
    l.Cond = 'U' 
    AND bv.cost > 0 
    AND bv.Active = 0
 

Что я сделал не так, чтобы он не запускался в Microsoft Query? Стоит отметить, что у меня есть еще один запрос на том же листе, который использует точно такой же подзапрос bv без каких-либо проблем

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

1. Совпадение, что ошибки начинаются со второй строки? Проверьте наличие случайных символов или форматирования в конце строки 1.

2. На самом деле раньше все это было в одной строке — я разбил ее для удобства чтения на ТАК

3. Я готов поспорить, что это Excel или поставщик путается с CTE. Работает ли это, если вы специально прописываете столбцы в определении CTE? WITH bv (BatchID, BatchDate, BatchName, Cost, BatchValue, Multiplier, Active) AS (...

4. Если проблема в WITH том , что вы можете попытаться преобразовать bv в суб-выбор. JOIN (SELECT b.BatchID, ...) AS bv ON h.BatchID=bv.BatchID

5. Само сообщение об ошибке может быть отвлекающим маневром. Вы не всегда определяете Active Price QtyFound столбцы и — они отображаются в нескольких таблицах?