代码之家  ›  专栏  ›  技术社区  ›  Ram

避免在SQL Server中重复

  •  1
  • Ram  · 技术社区  · 7 年前

    我运行此查询时得到以下结果。

    SELECT DISTINCT PT.F_PRO AS F_PRODUCT, PT.F_TEXT_CODE AS F_TEXT_CODE, PHT.F_PHRASE AS F_PHRASE FROM T_PROD_TEXT PT
    LEFT JOIN T_P_LINKAGE PHL
        ON PT.F_TEXT_CODE = PHL.F_TEXT_CODE
    INNER JOIN T_P_TRANSLATIONS PHT
        ON PHL.F_PHRASE_ID = PHT.F_PHRASE_ID
    WHERE PT.F_DATA_CODE = 'MANU' AND PHT.F_LANGUAGE = 'EN'
    
    OUTPUT
    
    F_PRODUCT   F_TEXT_CODE F_PHRASE
    294264_B    MANU0008    Alcoa, Inc
    294264_B    MANU0012    BioSensory
    00091A      MANU0006    3M Company
    00094A      MANU0006    4M Company
    00094A      MANU0006    5M Company
    

    上面的查询在FúPRODUCT列中返回重复项。我想显示没有重复项的F戋PRODUCT。在不使用top命令的情况下,每个F_产品只能显示一条记录(第一条记录)

    Required Output
    
    F_PRODUCT   F_TEXT_CODE F_PHRASE
    294264_B    MANU0008    Alcoa, Inc.
    00091A      MANU0006    3M Company|par
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   SQLChao    7 年前

    你可以用 row_number() 为一组f_pro中的每一行指定一个数字。然后只检索第1行。你可以改变 order by 如果有别的东西决定了顺序。

    SELECT *
    FROM
      (SELECT PT.F_PRO AS F_PRODUCT, PT.F_TEXT_CODE AS F_TEXT_CODE, PHT.F_PHRASE AS F_PHRASE, ROW_NUMBER() OVER (PARTITION BY PT.F_PRO ORDER BY PHT.F_PHRASE ASC) AS RowNum
      FROM T_PROD_TEXT PT
      LEFT JOIN T_P_LINKAGE PHL
          ON PT.F_TEXT_CODE = PHL.F_TEXT_CODE
      INNER JOIN T_P_TRANSLATIONS PHT
          ON PHL.F_PHRASE_ID = PHT.F_PHRASE_ID
      WHERE PT.F_DATA_CODE = 'MANU' AND PHT.F_LANGUAGE = 'EN') dt
    WHERE RowNum = 1
    
        2
  •  0
  •   Cetin Basoz    7 年前
    SELECT PT.F_PRO AS F_PRODUCT, 
    MIN(PT.F_TEXT_CODE) AS F_TEXT_CODE, 
    MIN(PHT.F_PHRASE) AS F_PHRASE FROM T_PROD_TEXT PT
    LEFT JOIN T_P_LINKAGE PHL
        ON PT.F_TEXT_CODE = PHL.F_TEXT_CODE
    INNER JOIN T_P_TRANSLATIONS PHT
        ON PHL.F_PHRASE_ID = PHT.F_PHRASE_ID
    WHERE PT.F_DATA_CODE = 'MANU' AND PHT.F_LANGUAGE = 'EN'
    group By PT.F_PRO;
    

    是一种方法。它不是为“第一”而做的,因为它很模糊,你如何定义“第一”。