У меня есть отчет, который представляет информацию, и я получаю противоречивую информацию, основанную на том, что, по-видимому, является проблемой с представлением SQL или, возможно, с функцией SQL, вложенной в представление.Я попытался найти способ отладки SQL View, однако, похоже, что SSMS будет отлаживать только хранимые процедуры, поэтому я не совсем уверен, как пройти и посмотреть, что происходит.Это действительно поставило меня в тупик, и я не могу не задаться вопросом, не является ли это проблемой округления.GetItemAverageCost RETURNS DECIMAL(12,2)
и DataType в sitli.QuantityIssuedAtStockUOM - это System.Int64 / bigint (sidenote: я не совсем понимаю, почему LINQPad отображает 2 типа данных для этого столбца. В дереве слева после расширения таблицы sitli и зависания над нимNumberIssuedAtStockUOM всплывет всплывающее окно BigInt NOT NULL, но когда я возьму (100) и наведу курсор мыши на столбец в наборе результатов, появится сообщение System.Int64).Anyroad, вот функция COALESCE.
COALESCE((dbo.GetItemAverageCost(ItemModel.IDItemModel)*sitli.QuantityIssuedAtStockUOM) / ISNULL(NULLIF(ItemModel.UOMFactor, 0),1),0) -- 259.73
--ROUND(COALESCE((dbo.GetItemAverageCost(ItemModel.IDItemModel)*sitli.QuantityIssuedAtStockUOM) / ISNULL(NULLIF(ItemModel.UOMFactor, 0),1),0),2) -- 259.73
--COALESCE(ROUND((dbo.GetItemAverageCost(ItemModel.IDItemModel)*sitli.QuantityIssuedAtStockUOM) / ISNULL(NULLIF(ItemModel.UOMFactor,2), 0),1),0) -- 259.70
--COALESCE((ROUND(dbo.GetItemAverageCost(ItemModel.IDItemModel),2)*sitli.QuantityIssuedAtStockUOM) / ISNULL(NULLIF(ItemModel.UOMFactor, 0),1),0) -- 259.73
оригинал / неверное объединение:
COALESCE(dbo.GetItemAverageCost(ItemModel.IDItemModel)*sitli.QuantityIssuedAtStockUOM,0)
Я не уверен, что еще можно включить, но я не нашел много ресурсов в Интернете, которые бы дали представление о такой ситуации.Заранее большое спасибо за ваше время.
РЕДАКТИРОВАТЬ: GetItemAverageCost:
ALTER FUNCTION GetItemAverageCost
(
@IDItemModel varchar(8000)
)
RETURNS DECIMAL(16,4)
--RETURNS DECIMAL(12,2)
AS
BEGIN
RETURN
(
SELECT
COALESCE(AVG(poli.UnitPrice),0) as AvgCost
-- COALESCE(ROUND(AVG(poli.UnitPrice),0),2) as AvgCost 260.00
FROM ItemModel im
LEFT JOIN VendorItem vi
ON im.IDItemModel = vi.IDItemModel
JOIN POLineItem poli
ON vi.IDVendorItem = poli.IDVendorItem
WHERE
im.IDItemModel = @IDItemModel
GROUP BY
im.IDItemModel,
im.ItemNumber
)
END