避免在SQL Server中重复

时间:2018-07-25 15:33:36

标签: select sql-server-2012

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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”。

相关问题