我想创建一个从现有表中获取值的表。 现有表具有以下列:
NAME VARCHAR2(255 BYTE) ,
TYPE VARCHAR2(255 BYTE) ,
DT_CHECKPOINT VARCHAR2(255 BYTE),
STATUS VARCHAR2(255 BYTE)
我有这样的行:
record 1: U83 PC/BC 21/10/2023 OK
record 2: U83 PC/BC 22/10/2023 KO
record 3: FR DH 22-OTT-23 KO
record 4: FR DH 25-OTT-23 KO
我想创建一个新表来计算当月的 KO 值和 OK 值,如下所示:
record 1: U83 PC/BC OTT-23 1 1
record 2: FR DH OTT-23 0 2
如何创建这个表?我知道 DT_CHECKPOINT 是 VARCHAR2 是不正确的,但我无法更改它
尚不清楚两行中部分日期字符串均为“OTT-23”背后的逻辑是什么。因此,排除您可以使用条件聚合并按前两列进行分组:
WITH -- S a m p l e D a t a :
tbl ( A_NAME, A_TYPE, DT_CHECKPOINT, STATUS ) AS
( Select 'U83', 'PC/BC', '21/10/2023', 'OK' From Dual Union All
Select 'U83', 'PC/BC', '22/10/2023', 'KO' From Dual Union All
Select 'FR', 'DH', '22-OTT-23', 'KO' From Dual Union All
Select 'FR', 'DH', '25-OTT-23', 'KO' From Dual
)
-- M a i n S Q L :
Select A_NAME, A_TYPE,
Count(Case When STATUS = 'KO' Then 1 End) "KO_COUNT",
Count(Case When STATUS = 'OK' Then 1 End) "OK_COUNT"
From tbl
Group By A_NAME, A_TYPE
Order By A_NAME Desc
/* R e s u l t :
A_NAME A_TYPE KO_COUNT OK_COUNT
------ ------ ---------- ----------
U83 PC/BC 1 1
FR DH 2 0 */
如果你解释为什么日期部分应该像问的那样,也许有人可以帮忙。