Как избавиться от дубликатов записей - PullRequest
0 голосов
/ 18 мая 2018

Привет! Я создал один запрос ниже и столкнулся с проблемой

SqlQuery

;with tbl as
(
select ROW_NUMBER() over(partition by oi.Name,T.gwtxid order by o.order_id desc) as number,
isnull(oi.Name,'') AS 'Name'
,isnull(T.gwtxid,'') as 'gwtxid'
FROM ORDERS o
INNER JOIN 
ORDERITEMS oi on o.Order_ID=oi.Order_ID
left JOIN 
PAYMENTS P on p.Order_ID=o.Order_ID    
left JOIN 
TRANSACTIONS T ON T.Transaction_ID=P.Transaction_ID    
WHERE O.TOTALCHARGES>0 and o.OrderNumber is not null and o.Order_ID=195180046

)
select * from tbl where  number=1 

И моя запись выглядит так: Структура таблицы

Number   Name           gwtxid  
1      Skunk2 Lower   00WA90298MF810153R
1      Skunk2 Lower   03GF53362DR764524D
1      CA_Taxable     3GF53362DR764524D
1      CA_Taxable     0WA90298MF810153R
1      UPS Ground      0WA90298MF810153R
1      UPS Ground      3GF53362DR764524D

Мне просто нужна уникальность имени, а затем можно повторить идентификатор транзакции

Ниже приведены мои требования, такие как Требуемая структура таблицы

Name              gwtxid  
Skunk2 Lower      03GF53362DR764524D
CA_Taxable        0WA90298MF810153R
UPS Ground

Отредактировано Требуется Структура таблицы , где повторение gwtxid также может быть хорошо

Name              gwtxid  
Skunk2 Lower      03GF53362DR764524D
CA_Taxable        0WA90298MF810153R
UPS Ground        03GF53362DR764524D

Может ли кто-нибудь помочь мне в этом, я пытался использовать rownumber ()и это дает неправильные записи

1 Ответ

0 голосов
/ 19 мая 2018

С MSDN SELECT - предложение OVER

(предложение PARTITION BY) Делит набор результатов запроса на разделы.Оконная функция применяется к каждому разделу отдельно, и вычисления перезапускаются для каждого раздела.

В вашем случае: partition by oi.Name,T.gwtxid дает вам следующие группы / разделы:

Group #
1      Skunk2 Lower   00WA90298MF810153R
2      Skunk2 Lower   03GF53362DR764524D
3      CA_Taxable     3GF53362DR764524D
4      CA_Taxable     0WA90298MF810153R
5      UPS Ground      0WA90298MF810153R
6      UPS Ground      3GF53362DR764524D

Поскольку каждыйгруппа в вашем примере содержит только одну строку, вы получаете number = 1 для каждой записи.

Если вы измените на partition by oi.Name, тогда вы получите следующие группы:

Group #
1      Skunk2 Lower   00WA90298MF810153R
1      Skunk2 Lower   03GF53362DR764524D
2      CA_Taxable     3GF53362DR764524D
2      CA_Taxable     0WA90298MF810153R
3      UPS Ground      0WA90298MF810153R
3      UPS Ground      3GF53362DR764524D

ТогдаВы должны получить ответ, который ищете.

...