显示默认值解码Oracle SQL

时间:2017-04-10 22:43:18

标签: sql oracle oracle11g decode

如果我的某个表中不存在用户,我试图将值设置为零。目前,我使用解码来计算满足特定条件的用户数量,然后显示结果。

.thing

问题是我有一个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; ,其中包含其他值。如果third table (TT)的值为TT中不存在的值,那么我需要为所有Decode值显示该记录的0&#39。

所需的输出类似于:

Table T

表t中不存在 D_CODE, C_NO, FirstValue, SecondValue, ThirdValue, LastValue INF 600 2 0 0 0 INF 501 0 0 1 0 INF 400 0 0 0 0 ,仅在表TT中

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您的问题是您正在按require(purrr) require(readr) # or require(tidyverse) temp <- list.files(pattern="*.csv") map_df(temp, read_delim, delim = "\t", escape_double = FALSE, trim_ws = TRUE) 过滤用户,这意味着任何不符合该条件的用户都不会在结果中出现。所以,根据我对你的问题的理解,你需要这个:

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表之间的关系。

附注:始终使用SQL ANSI [LEFT] JOINs样式。

ALSO 请注意,对于您当前的查询和当前提取的字段,表格TS完全无关,除非您没有正确解释。