2010-09-29 3 views
0

Calling ОДС так:ТВФ UDF не возвращает те же данные, как SELECT,

SELECT 
     product_name, 
     SUM(quantity) AS SumQty, 
     SUM(face_value) AS SumFaceValue, 
     SUM(net_cost)AS SumNetCost, 
     SUM(face_value - net_cost) AS SumScripRebate, 
     organization_name 
FROM getSalesSummary(@GLSCOrgId, @BeginDate, @EndDate) getSalesSummary 
GROUP BY product_name, organization_name 
ORDER BY product_name 

урожайности:

"Chili's  1 25.00 22.75 2.25 Sample Organization 1 
    CVS/pharmacy 1 25.00 23.50 1.50 Sample Organization 1 
    Macy's  1 100.00 90.00 10.00 Sample Organization 1" 

Используя логику UDF и тестирование результатов с SELECT:

SELECT 
     product_name, 
     SUM(quantity) AS SumQty, 
     SUM(face_value) AS SumFaceValue, 
     SUM(net_cost) AS SumNetCost, 
     SUM(face_value - net_cost) AS SumScripRebate, 
     organization_name 
FROM @ReturnTable 
GROUP BY product_name, organization_name 
ORDER BY product_name 

доходность:

"Chili's  4 100.00 91.00 9.00 Sample Organization 1 
    CVS/pharmacy 1 25.00 23.50 1.50 Sample Organization 1 
    Macy's  1 100.00 90.00 10.00 Sample Organization 1" 

@ReturnTable является таблицей, возвращенной UDF и создается следующим образом:

INSERT INTO @ReturnTable(product_name, 
         unit_price, 
         quantity, 
         face_value, 
         net_cost, 
         organization_name) 
(select * from @TablePartial UNION select * from @TableClosed) 

тест с SELECT, и переменными возвращают правильные данные, но вызов ОДС не получает те другие 3 Перец чили записей. Я использую те же данные для параметров. Я довольно новичок в UDF, и я не уверен, почему он будет возвращать разные данные, чем то, что делает SELECT. Любые предложения и/или ответы?

+0

может у генерировать скрипты для таблиц, данных и функции и сообщение здесь он может дать больше идеи – Thakur

ответ

1

Вы, вероятно, нужно UNION ALL не UNION

Глядя на два набора результатов он добавляет, как будто строки 4 Chilli являются все же.

Chili's  1 25.00 22.75 2.25 Sample Organization 1 
Chili's  1 25.00 22.75 2.25 Sample Organization 1 
Chili's  1 25.00 22.75 2.25 Sample Organization 1 
Chili's  1 25.00 22.75 2.25 Sample Organization 1 
------------------------------------------------------------- 
Chili's  4 100.00 91.00 9.00 Sample Organization 1 

Использование UNION удалит дубликаты, оставив вас с одной строки.

+0

Не будет ли СОЮЗ ВСЕ создавать дубликаты? Кроме того, почему это имеет значение? Выбрав все из таблицы и вернув таблицу, вы должны дать те же результаты, независимо от того, как они созданы правильно? – LobalOrning

+0

'UNION ALL' не будет создавать дубликаты. Он просто не удалит дубликаты. Невозможно рассуждать о том, почему вы получаете разные результаты. Вам нужно будет добавить достаточно подробностей к вашему вопросу, чтобы мы могли воспроизвести проблему. –

+0

Хорошо, я посмотрю, что еще мне разрешено публиковать, и попробуйте UNION ALL – LobalOrning

0

Единственное, что я могу думать о том UNION изменить его UNION ALLUNION устранит Dups

Выполнить эти запросы, чтобы увидеть разницу

select 1 as a 
union 
select 1 
union 
select 1 


select 1 as a 
union all 
select 1 
union all 
select 1 
Смежные вопросы