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