【问题标题】:Avoid duplication in SQL Server避免 SQL Server 中的重复
【发布时间】:2018-07-25 15:33:35
【问题描述】:

当我运行这个查询时,我得到了以下结果。

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 COLUMN 中返回重复项。我想显示 F_product 而没有重复项。每个 F_product 只应显示一条记录。(第一条记录)不使用 top 命令

Required Output

F_PRODUCT   F_TEXT_CODE F_PHRASE
294264_B    MANU0008    Alcoa, Inc.
00091A      MANU0006    3M Company|par

【问题讨论】:

  • 你会按什么顺序来确定哪个是“第一”?
  • 您是否还有错字,或者您是否也应该得到00094A vs 00091A
  • 对不起 00094A 不是 00091A
  • 它应该显示每个 f_product 记录的第一条记录
  • 00091A 和 00094A。如果不是,你应该解释原因。

标签: select sql-server-2012


【解决方案1】:

您可以使用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】:
    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;
    

    是一种方法。它不适用于“FIRST”,因为您将如何定义“FIRST”含糊不清。

    【讨论】:

    • 非常感谢
    • 是否可以在查询中使用不存在子句。
    • @Ram,是的,你可以。
    猜你喜欢
    • 2017-03-03
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2020-01-12
    • 2020-03-16
    • 2014-08-16
    相关资源
    最近更新 更多