显示默认值解码Oracle SQL
如果我的一个表中不存在用户,我将尝试将值设置为零。目前,我正在使用decode计算满足特定条件的用户数,然后显示结果显示默认值解码Oracle SQL,sql,oracle,oracle11g,decode,Sql,Oracle,Oracle11g,Decode,如果我的一个表中不存在用户,我将尝试将值设置为零。目前,我正在使用decode计算满足特定条件的用户数,然后显示结果 SELECT T.D_CODE, T.C_NO, SUM(DECODE(t.Value, 'A', 1, 0)) AS FirstValue, SUM(DECODE(t.Value, 'B', 1, 0)) AS SecondValue, SUM(DECODE(t.Value, 'C', 1, 0)) AS Thir
SELECT T.D_CODE,
T.C_NO,
SUM(DECODE(t.Value, 'A', 1, 0)) AS FirstValue,
SUM(DECODE(t.Value, 'B', 1, 0)) AS SecondValue,
SUM(DECODE(t.Value, 'C', 1, 0)) AS ThirdValue,
SUM(DECODE(t.Value, 'F', 1, 0)) AS LastValue
FROM Table T,
Table OtherTable S
WHERE T.T_SSN = S.SSN(+)
AND T.D_CODE = 'INF'
GROUP BY t.D_CODE,
T.C_NO;
问题是我有一个第三个表(TT)
,其中包含附加值。如果TT
有一个值不在表T
中,那么我需要用0来显示所有解码值的记录
所需的输出如下所示:
D_代码,C_编号,第一个值,第二个值,第三个值,最后一个值
INF 600 2 0 0 0
INF 501 0 1 0
INF 400 0 0 0
其中INF 400
不存在于表t中,仅存在于表TT中
有什么建议吗?您的问题是您正在通过
T.D_code='INF'
筛选用户,这意味着任何不符合该标准的用户都不会出现在结果中。所以,就我对你的问题的理解而言,你需要这个:
SELECT T.D_CODE,
T.C_NO,
SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'A' THEN 1 ELSE 0 END) AS FirstValue,
SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'B' THEN 1 ELSE 0 END) AS AS SecondValue,
SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'C' THEN 1 ELSE 0 END) AS AS ThirdValue,
SUM(CASE WHEN T.D_CODE = 'INF' AND t.Value = 'D' THEN 1 ELSE 0 END) AS AS LastValue
FROM Table T
LEFT JOIN Table OtherTable S
ON T.T_SSN = S.SSN
LEFT JOIN AnotherTable TT
ON T.T_SSN = TT.SSN
GROUP BY t.D_CODE,
T.C_NO;
由于您没有提供有关TT
表的更多详细信息,我只是猜测了它与t
表之间的关系
旁注:始终使用SQL ANSI[LEFT]连接样式
另外请注意,对于您当前的查询和当前获取的字段,表
S
和TT
是完全不相关的,除非您没有正确解释。一个示例数据和所需的输出肯定会help@JorgeCampos当然,我想我明白了,但我不完全确定,所以我会给你一个答案,如果不是你想要的,你可以在评论中告诉我。此外,如果不是,则必须从三个表中添加满足所需输出的一些示例数据。