Sql 将Case语句嵌套到多列中?
我想知道是否有可能以一种方式构建我的SQL case语句,即为一行生成多列值,而不是创建新行。现在,我正在搜索跨多个校园的用户ID,我想为一个人显示一次这样的值Sql 将Case语句嵌套到多列中?,sql,oracle,nested,case,Sql,Oracle,Nested,Case,我想知道是否有可能以一种方式构建我的SQL case语句,即为一行生成多列值,而不是创建新行。现在,我正在搜索跨多个校园的用户ID,我想为一个人显示一次这样的值 CASE WHEN R.CAMPUS = 'A' THEN R.NETID ELSE NULL END AS "A_NETID", CASE WHEN R.CAMPUS = 'B' THEN R.NETID ELSE NULL END AS "B_NETID", CASE WHEN R.CAMPUS = 'C' THEN R
CASE WHEN R.CAMPUS = 'A' THEN R.NETID ELSE NULL END AS "A_NETID",
CASE WHEN R.CAMPUS = 'B' THEN R.NETID ELSE NULL END AS "B_NETID",
CASE WHEN R.CAMPUS = 'C' THEN R.NETID ELSE NULL END AS "C_NETID",
CASE WHEN R.CAMPUS = 'D' THEN R.NETID ELSE NULL END AS "D_NETID",
CASE WHEN R.CAMPUS = 'E' THEN R.NETID ELSE NULL END AS "E_NETID",
CASE WHEN R.CAMPUS = 'F' THEN R.NETID ELSE NULL END AS "F_NETID",
CASE WHEN R.CAMPUS = 'G' THEN R.NETID ELSE NULL END AS "G_NETID"
上面的代码是根据每个用户拥有的校园ID数量创建一行,现在我不确定我所设想的是否可行
有没有人有过这类案例的经验
示例结果:Nathan在两个校园,结果是两行,每个校园ID一行,期望的目标是让Nathan的两个ID在同一行中,每个值在单独的列中返回
MainID DISPLAY_NAME EMAIL RELATIONSHIP_CAMPUS A_NETID
B_NETID C_NETID D_NETID E_NETID F_NETID G_NETID
12345 Nathan Smith (null) (null) nathansmith (null) (null)
(null) (null)
12345 Nathan Smith (null) nathanSmith (null) (null) (null)
(null) (null)
预期的结果将是:
MainID DISPLAY_NAME EMAIL RELATIONSHIP_CAMPUS A_NETID
B_NETID C_NETID D_NETID E_NETID F_NETID G_NETID
12345 Nathan Smith (null) nathanSmith nathansmith (null) (null)
(null) (null)
简单地汇总案例陈述。根据实际数据调整列和表名称。如果需要更多用户级信息,请将其添加到“选择”和“按行分组”
请提供一个数据和预期输出的示例,您使用的是哪种产品?博士后?神谕SQL只是一种查询语言,而不是特定数据库产品的名称。啊,是的,很抱歉,这是一个Oracle数据库。
SELECT user_ID,
MAX(CASE WHEN R.CAMPUS = 'A' THEN R.NETID ELSE NULL END) AS "A_NETID",
MAX(CASE WHEN R.CAMPUS = 'B' THEN R.NETID ELSE NULL END) AS "B_NETID",
MAX(CASE WHEN R.CAMPUS = 'C' THEN R.NETID ELSE NULL END) AS "C_NETID",
MAX(CASE WHEN R.CAMPUS = 'D' THEN R.NETID ELSE NULL END) AS "D_NETID",
MAX(CASE WHEN R.CAMPUS = 'E' THEN R.NETID ELSE NULL END) AS "E_NETID",
MAX(CASE WHEN R.CAMPUS = 'F' THEN R.NETID ELSE NULL END) AS "F_NETID",
MAX(CASE WHEN R.CAMPUS = 'G' THEN R.NETID ELSE NULL END) AS "G_NETID"
FROM myTable
GROUP BY user_ID