Не удается найти ни столбец «a», ни пользовательскую функцию, ни агрегат «a.Quantity», либо имя является неоднозначным - PullRequest
0 голосов
/ 26 сентября 2018
USE [CompanyTest]
GO

SELECT 
    d.code, 
    SUM(a.ItemID - d.itemID) AS BalancePeriodId,
    -- NOTE PeriodID 0 for current need to add 1 for last year
    (SUM(a.Quantity (CASE WHEN b.TransactionTypeID = 15 THEN 1 ELSE 0 END)) + 
       SUM(a.Quantity (CASE WHEN b.TransactionTypeID = 16 THEN -1 ELSE 0 END))) AS QuantitySold,
    (SUM(a.Quantity  (Case when b.TransactionTypeID =17 then 1 Else 0 end )) +
    SUM(a.Quantity  (Case when b.TransactionTypeID =18 then -1 Else 0 end ))) AS QuanitityPurchased,
    (SUM(a.issuevalue  (Case when b.TransactionTypeID =15 then 1 Else 0 end )) +
sum (a.issuevalue  (Case when b.TransactionTypeID =16 then -1 Else 0 end ))) AS SalesValueSold,
    (SUM(a.CostValue  (Case when b.TransactionTypeID =15 then 1 Else 0 end ))+
     SUM(a.CostValue  (Case when b.TransactionTypeID =16 then -1 Else 0 end ))) AS CostValueSold,
    (SUM(a.CostValue  (Case when b.TransactionTypeID =17 then 1 Else 0 end ))+
SUM(a.issuevalue  (Case when b.TransactionTypeID =18 then -1 Else 0 end ))) AS ValuePurchased
FROM 
    dbo.TransactionHistory a
INNER JOIN 
    dbo.TransactionType b ON a.TransactionTypeID = b.TransactionTypeID 
                          AND a.TransactionTypeID IN (15, 16, 17, 18)
INNER JOIN 
    dbo.TransactionGroup c ON b.TransactionGroupID = c.TransactionGroupID
INNER JOIN 
    dbo.StockItem d ON a.ItemID = d.ItemID
WHERE 
    a.ItemID = d.ItemID 
    AND (a.TransactionDate = DATEADD (YEAR, -1, GETDATE())) 
    AND a.TransactionDate >'2018-03-31 00:00:00.000' 
GROUP BY
    d.Code

Я создал этот сценарий месяц назад для извлечения данных в заданном формате, который будет использоваться в другом сценарии для повторного импорта в другую таблицу.

Тогда он работал отлично, но теперь я получаю неоднозначноеошибка, и я просто не могу понять, почему!На сервере ничего не изменилось.Я поменял localadmin, но теперь всё как есть!

1 Ответ

0 голосов
/ 26 сентября 2018

Я бы порекомендовал вам не использовать случайные буквы, такие как a, b и т. Д. Для псевдонимов столбцов.Используйте сокращения таблиц, такие как TransactionType tt и TransactionHistory th.

. Как написано, ваш запрос не будет выполняться вообще.Обычная причина неоднозначной ошибки столбца заключается в том, что столбцы не определены.Но все квалифицированы.С другой стороны, это выражение:

sum (a.Quantity  (Case when b.TransactionTypeID =15 then 1 Else 0 end ))

Просто недопустимо.Возможно, между выражениями должен быть *.

Я предполагаю, что при перемещении кода, чтобы задать вопрос, вы указали одно или несколько имен столбцов, которые не были квалифицированы в исходном запросе.

...