Sql 选择不同的一列oracle

Sql 选择不同的一列oracle,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,这是我的问题 SELECT PHMR_ID, NVOL_MVT_COD, TO_CHAR(DATE_PREVUE, 'DD/MM/YYYY') AS DATE_PREVUE, TO_CHAR(DATE_ORIGINE_LT, 'DD/MM/YYYY') AS DATE_ORIGINE_LT, HTAD, DHC_AFF, PKG, PKG_GEO, GATE, TTB, BQE, SALLE, ESCALE, TA_CLE, IM_

这是我的问题

SELECT PHMR_ID,
  NVOL_MVT_COD,
  TO_CHAR(DATE_PREVUE, 'DD/MM/YYYY')     AS DATE_PREVUE,
  TO_CHAR(DATE_ORIGINE_LT, 'DD/MM/YYYY') AS DATE_ORIGINE_LT,
  HTAD,
  DHC_AFF,
  PKG,
  PKG_GEO,
  GATE,
  TTB,
  BQE,
  SALLE,
  ESCALE,
  TA_CLE,
  IM_IMMAT,
  VOL_NB_PAX_GLOB,
  VOL_CRIT_DOUANIER,
  VOL_PROTOCOLE,
  VOL_CORRESP,
  VOL_ETAT_VOL,
  NVL(TAS_GLOB, TER_COD1)                      AS TAS_GLOB,
  NVL(TER_TRAITEMENT, NVL(TAS_GLOB, TER_COD1)) AS TER_TRAITEMENT,
  NUM_SIEGE,
  VOL_ROT,
  INFO_SUP,
  TYPE_PREMIER_MSG,
  PREMIER_MSG,
  TYPE_DERNIER_MSG,
  DERNIER_MSG,
  TYP_JOUR,
  PHMR_ID_ARP,
  DECODE(NVOL_MVT_COD,'A',PHMR_ID_ARP,NULL) AS ID_ARP_A,
  DECODE(NVOL_MVT_COD,'D',PHMR_ID_ARP,NULL) AS ID_ARP_D,
  TYP_HORAIRE,
  DUREE_CORRESP,
  HOTEL,
  TYPE_CONTACT,
  RET_COD1,
  RET_LIB1,
  RET_COD2,
  RET_LIB2,
  HBLOC,
  DISTINCT_LOT_CORRESPONDANCE,
  OTHER_TYPE_MR,
  TYPE_CHAISE,
  STATUS_PHMR,
  LISTE_MSG,
  LIEU_RDV,
  CLASSE,
  PHMR_PRESTA_ID,
  PRESTA,
  DECODE(HORS_DELAI,1,'OUI','NON') AS HORSDELAI
FROM VW_PHMR
WHERE VW_PHMR.DATE_PREVUE >= to_date('06/07/2015','DD/MM/YYYY')
AND VW_PHMR.DATE_PREVUE   <= to_date('06/07/2015','DD/MM/YYYY')
AND (phmr_valide          IS NULL
OR phmr_valide             ='O')
ORDER BY VW_PHMR.DATE_PREVUE ASC,
  DHC ASC,
  PHMR_ID ASC
我只需要在这个专栏上获得不同的PHMR_ID only disticnt,我怎么做

要清楚;我有一个看法: 创建或替换强制视图VW_PHMR 菲德先生, 第1段, 金边先生, Phu PRENOM先生, 类型_MR, 西乌萨里亚, 国际航空运输协会, CIE_COD_OACI, NVOL_LIG_NUM, NVOL_MVT_COD, 日期(上), 日期来源, DHC, HTAD, DHC_AFF, PKG, 北京大学地理学院, 大门 TTB, BQE, 莎莉, 埃斯卡尔, 塔库克, 我是伊玛特, 世界杯, 瓦努克里特杜安尼尔, VOL_PROTOCOLE, 沃库雷普斯, 第五卷, 塔苏环球酒店, 特鲁叛徒, NUM_围城, 沃罗, 信息支持, 总理(MSG), 键入\u PREMIER\u MSG, 德尔尼厄味精, 类型_DERNIER_MSG, 典型的, PHMR_ID_ADP, TYP_HORAIRE, 杜雷奥·科雷斯普, 酒店 型触点, RET_COD1, RET_LIB1, RET_COD2, RET_LIB2, HBLOC, 不同的对应关系, 其他类型的, 型轻便马车, 地位(PHMR), 身份证, 李斯特味精, 利乌, CLASSE, 普瓦利德先生, PHMR_PRESTA_ID, 普雷斯塔, 霍斯杜莱 像 选择不同的 p、 菲德先生, p、 第1段, p、 金边先生, p、 Phu prenom先生, p、 将mr列为类型mr, p、 作为cie_saria的cie_cle, c、 国际航空运输协会, c、 cie_cod_oaci, p、 nvol_lig_num, p、 nvol_mvt_cod, p、 日期exp作为日期exp, p、 卷日期为原始日期, v、 dhc作为dhc, 致_CHAR v.HTAD,'HH24:MI'为HTAD, 解码 v、 第二卷, NULL,v.DHC|u TYP | TO_CHAR v.DHC,'HH24:MI', 解码v.dhc_类型,'N','D',v.dhc_类型 ||致_CHAR v.vol_hadb,'HH24:MI' 作为DHC_AFF, v、 停车作为包装, v、 pkg_geo作为pkg_geo, v、 门作为门, v、 TAPI作为TTB, v、 作为BQE的银行, v、 莎莉作为莎莉, v、 埃斯凯尔作为埃斯凯尔, v、 塔库克, v、 我是伊玛特, v、 世界杯, v、 瓦努克里特杜安尼尔, v、 protocole作为VOL_protocole, p、 沃库雷普斯, v、 第五卷, v、 塔苏环球酒店, v、 作为一种背叛, p、 num_围城, v2.cie|cle | v2.nvol|lig|num AS vol|rot, p、 信息作为信息, 将“DD/MM/yyyyy HH24:MI”作为PREMIER消息发送至, tm.typmes\u cod作为类型\u premier\u msg, 将“DD/MM/yyyyy HH24:MI”作为DERNIER_MSG发送至_CHAR p.DH_DERNIER_MSG, tm2.典型cod类型为dernier msg, 解码p.TYP_JOUR,空,'S',p.TYP_JOUR, p、 PHMR_ID_ADP, 解码p.TYP_HORAIRE,空'J',p.TYP_HORAIRE, p、 杜雷奥·科雷斯普, p、 酒店, v、 型触点, v、 RET_COD1, v、 RET_LIB1, v、 RET_COD2, v、 RET_LIB2, v、 第二卷, p、 不同的对应关系, p、 类型_MR, P.TYPE_躺椅, sp.status_lib_court作为status_PHMR, sp.PHMR_状态作为ID_状态, p、 以liste_消息的形式列出消息, p、 Phu lieupc先生作为lieu rdv, p、 phmr_classe作为classe, p、 phmr_valide作为phmr_valide, p、 phmr_presta_id, p、 普雷斯塔, p、 霍斯杜莱 来自PHP先生, cie c, 大众汽车, vw_vols v2, 类型_messages tm, 输入消息tm2, 状态\u phmr sp 其中c.cie_-cle+=p.cie_-cle 和v.vol_ident+=p.vol_ident 和v2.vol_ident+=v.vol_ident 和tm.msg_typ+=p.typ_PREMIER_msg 和tm2.msg_typ+=p.typ_DERNIER_msg 和sp.phmr_状态+=p.phmr_状态

当我在这个视图上执行这个命令时,我有1904行

现在,我需要一个左连接来获得另一个列,我必须始终有1904行,所以我修改我的视图,像这样创建或替换强制视图VW_PHMR 菲德先生, 第1段, 金边先生, Phu PRENOM先生, 类型_MR, 西乌萨里亚, 国际航空运输协会, CIE_COD_OACI, NVOL_LIG_NUM, NVOL_MVT_COD, 日期(上), 日期来源, DHC, HTAD, DHC_AFF, PKG, 北京大学地理学院, 大门 TTB, BQE, 莎莉, 埃斯卡尔, 塔库克, 我是伊玛特, 世界杯, 瓦努克里特杜安尼尔, VOL_PROTOCOLE, 沃库雷普斯, 第五卷, 塔苏环球酒店, 特鲁叛徒, NUM_围城, 沃罗, 信息支持, 总理(MSG), 键入\u PREMIER\u MSG, 德尔尼厄味精, 类型_DERNIER_MSG, 典型的, PHMR_ID_ADP, TYP_HORAIRE, 杜雷奥·科雷斯普, 酒店 型触点, RET_COD1, RET_LIB1, RET_COD2, RET_LIB2, HBLOC, 不同的对应关系, 其他类型的, 型轻便马车, 德尼厄·加隆, 地位(PHMR), 身份证, 李斯特味精, 利乌, CLASSE, 普瓦利德先生, PHMR_PRESTA_ID, 普雷斯塔, 霍斯杜莱 像 选择不同的 p、 菲德先生, p、 第1段, p、 金边先生, p、 Phu prenom先生, p、 将mr列为类型mr, p、 cie_cle作为cie_s 咏叹调 c、 国际航空运输协会, c、 cie_cod_oaci, p、 nvol_lig_num, p、 nvol_mvt_cod, p、 日期exp作为日期exp, p、 卷日期为原始日期, v、 dhc作为dhc, 致_CHAR v.HTAD,'HH24:MI'为HTAD, 解码 v、 第二卷, NULL,v.DHC|u TYP | TO_CHAR v.DHC,'HH24:MI', 解码v.dhc_类型,'N','D',v.dhc_类型 ||致_CHAR v.vol_hadb,'HH24:MI' 作为DHC_AFF, v、 停车作为包装, v、 pkg_geo作为pkg_geo, v、 门作为门, v、 TAPI作为TTB, v、 作为BQE的银行, v、 莎莉作为莎莉, v、 埃斯凯尔作为埃斯凯尔, v、 塔库克, v、 我是伊玛特, v、 世界杯, v、 瓦努克里特杜安尼尔, v、 protocole作为VOL_protocole, p、 沃库雷普斯, v、 第五卷, v、 塔苏环球酒店, v、 作为一种背叛, p、 num_围城, v2.cie|cle | v2.nvol|lig|num AS vol|rot, p、 信息作为信息, 将“DD/MM/yyyyy HH24:MI”作为PREMIER消息发送至, tm.typmes\u cod作为类型\u premier\u msg, 将“DD/MM/yyyyy HH24:MI”作为DERNIER_MSG发送至_CHAR p.DH_DERNIER_MSG, tm2.典型cod类型为dernier msg, 解码p.TYP_JOUR,空,'S',p.TYP_JOUR, p、 PHMR_ID_ADP, 解码p.TYP_HORAIRE,空'J',p.TYP_HORAIRE, p、 杜雷奥·科雷斯普, p、 酒店, v、 型触点, v、 RET_COD1, v、 RET_LIB1, v、 RET_COD2, v、 RET_LIB2, v、 第二卷, p、 不同的对应关系, p、 类型_MR, P.TYPE_躺椅, **p2.TYP_DERNIER_JALON AS DERNIER_JALON**, sp.status_lib_court作为status_PHMR, sp.PHMR_状态作为ID_状态, p、 以liste_消息的形式列出消息, p、 Phu lieupc先生作为lieu rdv, p、 phmr_classe作为classe, p、 phmr_valide作为phmr_valide, p、 phmr_presta_id, p、 普雷斯塔, p、 霍斯杜莱 来自PHP先生, **普雷斯塔先生p2**, cie c, 大众汽车, vw_vols v2, 类型_messages tm, 输入消息tm2, 状态\u phmr sp 其中c.cie_-cle+=p.cie_-cle 和v.vol_ident+=p.vol_ident 和v2.vol_ident+=v.vol_ident 和tm.msg_typ+=p.typ_PREMIER_msg 和tm2.msg_typ+=p.typ_DERNIER_msg 和sp.phmr_状态+=p.phmr_状态 **p.phmr_id+=p2.phmr_id**

我如何解决这个问题


这就是你能做到的。如果您想要其他东西,那么不要忘记编写更好的规范

select distinct PHMR_ID
from VW_PHMR

我认为如果你更换:

 FROM phmr p,
      **phmr_presta p2**,

你会得到想要的结果

这样做的目的是获取PHMR_presta中每个PHMR_ID的最大PHMR_预设a_ID。然后它连接回PHMR_PRESTA,得到你要找的TYP_DERNIER_JALON。然后我用这个代替你的表,因为这是该表的子集

也许有一种更有效的方法来编写整个视图。但我关注的是你遇到的具体问题,而不是整个观点。哦在这之后你不应该需要区分

如果你创建了一个样本数据,我可以对此进行测试,但如果没有你提供的数据和模型,我不想这样做。所以这是未经测试的,可能有一些语法错误


未来问题的注意事项:删除所有额外的栏等。将问题分解为最简单的形式,并作为问题提问。这里额外的列和表太吵了,这让人有点想不起来;这是完全不必要的。

使用PHMR_idio创建的组,您必须决定为其他列返回哪些值。敏?最大值?求和、计数或其他聚合函数。否则你就不能得到一个清晰的答案。您可以编写一个单独的查询,只返回该列的不同值,但是。。。显示一些数据和预期结果,我们可能会想出一个不同的方法或编写一个SQLFIDDLE.com我会根据您的评论/答案在另一个评论中解释我的需要。。。你的问题是,phmr和phmr_presta之间存在着1对多的关系。由于您似乎只需要phmr_presta表中的TYP_DERNIER_JALON。。。你需要什么样的价值观?老大?最新的?都是吗?需要处理1-many以再次保留1904的记录计数示例数据将有助于显示phmr.phmr_ID=1和phmr_presta.phmr_ID有多个1。。。知道你要找哪一个会有帮助。这不是一个明显的问题,很可能是一个固定的问题。您需要在joinYes之前限制phmr_presta tables数据集phmr和phmr_presta之间的1-many关系,因此我需要phmr_presta提供的最新TYP_DERNIER_JALON。如何在加入之前限制phmr_presta tables数据集?我在另一篇评论中解释了我的需求非常感谢您的回答和建议。我认为语法不正确!!
FROM phmr p,
(SELECT IP1.PHMR_ID, IP1.TYP_DERNIER_JALON
FROM phmr_Presta IP1,
       (SELECT phmr_id, max(phmr_presta_id) M_PRESTA_ID
        FROM   phmr_presta
        GROUP BY phmr_id
       ) IP2
where IP1.PHMR_ID = IP2.PHMR_ID
  and IP1.PHMR_PRESTA_ID = IP2.M_PRESTA_ID) P2