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