我正在尝试通过Group By获取SQL查询,返回返回的内容,但是能够在重复CODE并且有两个记录的情况下,一个使用FINALDATE:TRUE而另一个使用FINALDATE:FALSE,可以不显示包含FINALDATE的记录:FALSE。这可能吗?非常感谢你提前。 (我在Oracle工作)
一声问候
查询:
SELECT distinct H1.CODE, ZL.DES AS ZONE, TIP.ABR, H1.ID_ITA, CASE (RS.FE_EN)
WHEN TO_DATE('10-01-2018', 'DD/MM/YYYY') THEN 'True'
ELSE 'False'
END AS FINALDATE
FROM SCHEMA.Fnt_Habitaciones h1
INNER JOIN SCHEMA.GEN_ITA_PO TIP ON H1.ID_ITA_PO = TIP.ID_ITA_PO
LEFT JOIN SCHEMA.PIS_ITA PZ ON H1.ID_ITA = PZ.ID_HABITACIONES
LEFT JOIN SCHEMA.PIS_ZOEZA ZL ON ZL.ID_ZOEZA = PZ.ID_ZOEZA AND 0
IS NOT NULL AND 0 = 1
INNER JOIN SCHEMA.RES_RESERVAS RS ON RS.ID_ITA = H1.ID_ITA
WHERE h1.activo=1 AND h1.id_esta= 15 AND (48 IS NULL OR 48 IS NOT NULL AND
H1.ID_BLOQUES = 48)
AND h1.id_ita NOT IN
(
SELECT hin.id_ita
FROM SCHEMA.Res_Reservas r
INNER JOIN SCHEMA.Fnt_ita hin ON hin.id_ita = r.id_ita
WHERE r.id_establecimientos = hin.id_establecimientos AND
hin.id_establecimientos = 15 AND r.id_ita IS NOT NULL
AND (('10-01-2018' > r.FE_EN AND '10-01-2018' <= r.fecha_salida ) OR ('10-
01-2018' < r.FE_EN AND '10-01-2018' >= r.fecha_salida))
) AND h1.id_ita NOT IN
(
SELECT hbin.id_ita FROM SCHEMA.Fnt_BloHab b
INNER JOIN SCHEMA.Fnt_ita hbin ON hbin.id_ita = b.id_ita
WHERE b.activo=1 AND '10-01-2018' >= b.fecha_inicio AND '10-01-2018' <=
b.fecha_fin AND b.indHouKee = 1
)
GROUP BY ZL.DES, H1.CODE, TIP.ABR,H1.ID_ita, RS.FE_EN
ORDER BY ZL.DES, h1.CODE ASC;
结果:
CODE ZONE ABR ID_ITA FINALDATE
0123 (null) DFAP 3349 False
1013 (null) DST 3257 False
1105 (null) DFA 3373 False --> I want this will nop appear in result. Because we have a TRUE with this CODE.
1105 (null) DFA 3373 True
2105 (null) DST 3541 False
3019 (null) DSTV 3644 False
4001 (null) SES 3798 False
4003 (null) SES 3799 False
4005 (null) SES 3800 False
4011 (null) DSU 3803 True
4011 (null) DSU 3803 False --> I want this will nop appear in result. Because we have a TRUE with this CODE.
4025 (null) JUS 3813 False
谢谢!
看起来你可以只使用聚合,它依赖于'True'之前'False'的字母排序:
SELECT H1.CODE, ZL.DES AS ZONE, TIP.ABR, H1.ID_ITA,
MAX(
CASE RS.FE_EN
WHEN TO_DATE('10-01-2018', 'DD/MM/YYYY') THEN 'True'
ELSE 'False'
END
) AS FINALDATE
...
GROUP BY ZL.DES, H1.CODE, TIP.ABR, H1.ID_ita
ORDER BY ZL.DES, h1.CODE ASC;
特定的RS.FE_EN
从group-by子句中删除,因为现在只在聚合的max()
函数调用中引用。
作为一个侧面问题,您似乎依赖于隐式转换和会话的NLS设置等
'10-01-2018' > r.FE_EN AND '10-01-2018' <= r.fecha_salida
最好将字符串显式转换为日期,就像在case表达式中一样;或使用日期文字:
DATE '2018-01-10' > r.FE_EN AND DATE '2018-01-10' <= r.fecha_salida
等等。;您也可以在case表达式中使用它而不是to_date()
。