sql - 使用不相关的表将表中的一列中的数据替换为另一列
问题描述
我正在更新一个现有系统,该系统将在网络上显示一个表格,以显示谁已经下班。数据是从由两个表组成的数据库中提取的。一个包含从通话中记录的实际数据,另一个是排序的“图例”,因此将列中的单个数字转换为纯文本描述。例如:
Options Table
|---------------------|------------------|------------------|
| LevelName | OptionNo | Description |
|---------------------|------------------|------------------|
| LorA | 1 | Late |
|---------------------|------------------|------------------|
| LorA | 2 | Absent |
|---------------------|------------------|------------------|
| TorT | 1 | Today |
|---------------------|------------------|------------------|
| TorT | 2 | Tomorrow |
|---------------------|------------------|------------------|
第二个表有这样的布局(只显示相关字段):
CallData Table
|---------------------|------------------|------------------|
| EmployeeName | Todaytomorrow | Late_Or_Absent |
|---------------------|------------------|------------------|
| John | 1 | 1 |
|---------------------|------------------|------------------|
| Jane | 2 | 2 |
|---------------------|------------------|------------------|
我遇到的问题是如何以某种方式关联这两个表,以便用选项表中的相应值替换 CallLog 表中的整数表示。
我尝试通过从两个表中选择所有来创建一个临时表,但是当我尝试替换这些值时,只有那些在连接后恰好对齐的值被替换。
这是我目前拥有的 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'
已编辑:添加了不同级别的加入。如果有两个以上的级别,则需要更通用的解决方案。
推荐阅读
- python - Python, FreePIE 模拟器 mod for mad max
- android - 如何使用kotlin在Android的firebase中获取child的键值
- networking - TCP/IP 标头标志
- python - 烧瓶导入错误 WSL2
- swift - NSDatePicker 前导零
- android - 当子列表视图以颤动结束时,有什么方法可以滚动父列表视图?
- time-complexity - LSTM,门控循环单元(GRU)的时间复杂度是多少?
- flutter - 错误 MSB6006:“cmd.exe”以代码 1 退出。Flutter Windows 应用程序无法构建
- sql - Postgresql how to convert insert value as parameters
- visual-studio-code - 为什么在vscode中绑定到“重新加载窗口”的键“Ctrl + R”不重新加载窗口?