代码之家  ›  专栏  ›  技术社区  ›  Mitesh Jain

如何消除重复记录

  •  0
  • Mitesh Jain  · 技术社区  · 6 年前

    您好,我在下面创建了一个查询,我面临一个问题

    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
    

    我只需要名称的唯一性,然后可以重复事务id

    以下是我的要求 所需的表结构

    Name              gwtxid  
    Skunk2 Lower      03GF53362DR764524D
    CA_Taxable        0WA90298MF810153R
    UPS Ground
    

    已编辑 所需的表结构 重复gwtxid也可以

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

    有谁能帮我解决这个问题吗?我曾尝试使用rownumber(),但它给出了错误的记录

    1 回复  |  直到 6 年前
        1
  •  2
  •   Alex    6 年前

    从…起 MSDN SELECT - OVER Clause

    ( 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
    

    那么你应该得到你想要的答案。