Sql 是否使用临时字段查找表?
我有一个生成以下结果的查询: 表1:Sql 是否使用临时字段查找表?,sql,sql-server,join,lookup,Sql,Sql Server,Join,Lookup,我有一个生成以下结果的查询: 表1: degree_code occupation_code degree_completions degree_level 1.0000 20-2021 10 1 1.0000 20-2022 10 1 1.1051 52-2095 2 3 1.1051
degree_code occupation_code degree_completions degree_level
1.0000 20-2021 10 1
1.0000 20-2022 10 1
1.1051 52-2095 2 3
1.1051 52-2095 41 2
1.5010 15-1100 2 3
我还有一个小的查找表,它将degree_级别与我需要使用的自定义类别关联起来:
表2
degree_level degree_level_recode
1 AADEGREE
2 AADEGREE
3 BACHDEGREE
我想构建第一个查询的输出,以报告以下格式:
degree_code occupation_code degree_completions degree_level AADEGREE BACHDEGREE
1.0000 20-2021 10 1 10 0
1.0000 20-2022 10 1 10 0
1.1051 52-2095 2 3 3 0
1.1051 52-2095 41 2 0 41
1.5010 15-1100 2 3 2 1
基本上,在原始查询中创建新的临时重新编码字段,当这些字段与度级别重新编码匹配时,报告它们下面的度完成情况,如果不匹配,则输入0。这是高度简化的;我将针对查询中每个元素中的其他字段对recode字段执行操作
我已经显示了degree_completions字段以供参考,但出于明显的冗余原因,我会在最后的查询中省略它
我想我需要使用CASE语句或类似的东西来进行比较检查,但我对SQL还是新手
编辑:
degree_code occupation_code degree_completions degree_level
1.0000 20-2021 10 1
1.0000 20-2022 10 1
1.1051 52-2095 2 3
1.1051 52-2095 41 2
1.5010 15-1100 2 3
参考以下Cha的回答,采用修改后的表1输出(映射重新编码后):
考虑此代码(编辑上方参考了表2):
产生这些结果的原因是:
degree_code degree_level LESSCOL AADEGR BACHDEGR MADEGR DOCDEG
01.0601 2 NULL NULL NULL NULL NULL
01.0601 3 NULL 22 NULL NULL NULL
01.0505 2 NULL NULL NULL NULL NULL
我正在努力做到:
degree_code degree_level LESSCOL AADEGR BACHDEGR MADEGR DOCDEG
01.0601 2 11 NULL NULL NULL NULL
01.0601 3 NULL 22 NULL NULL NULL
01.0505 2 3 NULL NULL NULL NULL
此外,将NULL替换为0。这就是您所追求的(假设:第一个表称为#temp1,第二个表称为#temp2):
这就是您所追求的(假设:第一个表名为#temp1,第二个表名为#temp2):
你用哪个数据库平台?你用哪个数据库平台?谢谢,我来试试。只是一个问题,除了习惯之外,还有什么原因可以将嵌套的SELECT别名为p,将轴别名为pvt?查询中未引用任何别名。谢谢,我将对此进行运行。只是一个问题,除了习惯之外,还有什么原因可以将嵌套的SELECT别名为p,将轴别名为pvt?查询中未引用任何别名。
degree_code degree_level LESSCOL AADEGR BACHDEGR MADEGR DOCDEG
01.0601 2 11 NULL NULL NULL NULL
01.0601 3 NULL 22 NULL NULL NULL
01.0505 2 3 NULL NULL NULL NULL
SELECT *
FROM
#temp1,
(SELECT degree_level, [AADEGREE] as col1, [BACHDEGREE] as col2
FROM
(SELECT degree_completions, #temp1.degree_level, degree_level_recode
FROM #temp1, #temp2 WHERE #temp1.degree_level = #temp2.degree_level) AS p
PIVOT
(
SUM (degree_completions)
FOR degree_level_recode IN
([AADEGREE], [BACHDEGREE])
) AS pvt
) as V
WHERE #temp1.degree_level = V.degree_level
ORDER BY 1