Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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 - Fatal编程技术网

Sql 使用不相关的表将表中一列的数据替换为另一列的数据

Sql 使用不相关的表将表中一列的数据替换为另一列的数据,sql,sql-server,Sql,Sql Server,我正在更新一个现有的系统,该系统将在web上显示一个表,以显示谁已呼叫下班。数据从由两个表组成的数据库中提取。一个包含从调用中记录的实际数据,另一个是某种“图例”,因此将列中的单个数字转换为纯文本描述。例如: Options Table |---------------------|------------------|------------------| | LevelName | OptionNo | Description | |-----

我正在更新一个现有的系统,该系统将在web上显示一个表,以显示谁已呼叫下班。数据从由两个表组成的数据库中提取。一个包含从调用中记录的实际数据,另一个是某种“图例”,因此将列中的单个数字转换为纯文本描述。例如:

Options Table

|---------------------|------------------|------------------|
|      LevelName      |     OptionNo     |    Description   |
|---------------------|------------------|------------------|
|         LorA        |         1        |       Late       |
|---------------------|------------------|------------------|
|         LorA        |         2        |      Absent      |
|---------------------|------------------|------------------|
|         TorT        |         1        |       Today      |
|---------------------|------------------|------------------|
|         TorT        |         2        |     Tomorrow     |
|---------------------|------------------|------------------|
第二个表的布局如下(仅显示相关字段):

我遇到的问题是如何以某种方式将这两个表关联起来,以便将CallLog表中的整数表示替换为Options表中的相应值

我尝试通过从两个表中选择all来创建一个临时表,但是,当我尝试替换值时,仅替换在连接后恰好对齐的值

以下是我目前拥有的SQL:

/*Create TempTable to be updated*/
 SELECT * INTO #tempStore FROM CallData, [Options]
 WHERE CallData.EmpName IS NOT NULL AND call_completed = '1'

 /*Query Pertinant Info*/
 SELECT [CallinID], [EmpName], [TodayTomorrow] AS [When], [Late_Or_Absent] AS [Type], [Late_Reason] AS [Reason], 
 [Absent_Reason], [Early_Reason], [Contact_Number], [Comment], [created_dt] FROM [#tempStore]

 /*Update Type to varChar*/
 ALTER TABLE [#tempStore]
 ALTER COLUMN [TodayTomorrow] nvarchar(20)

  /*Perform TorT Update*/
 UPDATE [#tempStore] SET [#tempStore].TodayTomorrow = [#tempStore].[Description]
 WHERE [#tempStore].LevelName = 'TorT' AND [#tempStore].TodayTomorrow = CONVERT(nvarchar(1), [#tempStore].[OptionNo])

非常感谢您提供的任何帮助。

对于本例,我认为以下几点可行:

select  cd.EmployeeName
        ,optTT.Description TodayTomorrow
        ,optLE.Description Late_or_Absent
from    CallData as cd
join    [Options] as optTT on optTT.OptionNo = cd.Late_or_Absent and optTT.LevelName = 'TorT'
join    [Options] as optLE on optLE.OptionNo = cd.TodayTomorrow and optLE.LevelName = 'LorA'

编辑:添加了不同级别的连接。如果有两个以上的级别,则需要一个更通用的解决方案。

我同意您的意见,但是此解决方案会出现故障,因为对于许多不同的级别名称,选项no可能是相同的。在上面的示例CallData表中,John有两个数字,但是选项No将只匹配一个。对,我错过了。所以侵权行为指的是今天明天的专栏,而劳拉指的是迟到或缺席?您想用描述替换这两个选项吗?我曾考虑过类似的选项,但是我不认为这比将更新硬编码到每个级别的临时表中更有效。每个员工都有5个不同的字段,适合相同的设计。
select  cd.EmployeeName
        ,optTT.Description TodayTomorrow
        ,optLE.Description Late_or_Absent
from    CallData as cd
join    [Options] as optTT on optTT.OptionNo = cd.Late_or_Absent and optTT.LevelName = 'TorT'
join    [Options] as optLE on optLE.OptionNo = cd.TodayTomorrow and optLE.LevelName = 'LorA'