Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否使用临时字段查找表?_Sql_Sql Server_Join_Lookup - Fatal编程技术网

Sql 是否使用临时字段查找表?

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

我有一个生成以下结果的查询:

表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       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