选择不考虑一个字段的不同记录

时间:2013-05-20 08:40:13

标签: sql group-by distinct

我有一个包含由七个字段组成的复合主键的表:

PK COD_LTN
PK COD_CANA
PK COD_FAM_PRO
PK COD_CTG_PRO
PK COD_PRO
PK COD_CFG_PRM_PRO
PK COD_FAM_PRM_PRO

我有两个记录:

COD_LTN  COD_CANA COD_FAM_PRO COD_CTG_PRO COD_PRO COD_CFG_PRM_PRO COD_FAM_PRM_PRO
00011    SPO      NF          C01         53      A               PZTR
00011    SPO      NF          C01         53      B               PZTR

我想选择不考虑字段COD_CFG_PRM_PRO的所有不同记录:

SELECT DISTINCT
        COD_LTN,
        COD_CANA,
        COD_FAM_PRO,
        COD_CTG_PRO,
        COD_PRO,
        -- COD_CFG_PRM_PRO, don't consider this
        COD_FAM_PRM_PRO
FROM
        PRM_STATICO_PRO  
WHERE
        COD_PRO=53;

当然有效:

COD_LTN  COD_CANA COD_FAM_PRO COD_CTG_PRO COD_PRO COD_FAM_PRM_PRO
00011    SPO      NF          C01         53      PZTR

但我还想选择使记录区别的字段COD_CFG_PRM_PRO,即我只想要一条记录:

COD_LTN  COD_CANA COD_FAM_PRO COD_CTG_PRO COD_PRO COD_CFG_PRM_PRO COD_FAM_PRM_PRO
00011    SPO      NF          C01         53      A               PZTR

我找不到。

1 个答案:

答案 0 :(得分:2)

你可以使用group by和min函数来解决这个问题 -

SELECT Cod_Ltn,
       Cod_Cana,
       Cod_Fam_Pro,
       Cod_Ctg_Pro,
       Cod_Pro,
       MIN(Cod_Cfg_Prm_Pro),
       Cod_Fam_Prm_Pro
  FROM Prm_Statico_Pro
 WHERE Cod_Pro = 53
 GROUP BY Cod_Ltn,
          Cod_Cana,
          Cod_Fam_Pro,
          Cod_Ctg_Pro,
          Cod_Pro,
          Cod_Fam_Prm_Pro;

这将给出您期望的结果..