因此,我的组织正在向另一个组织提供数据,该组织要求数据与特定的架构相匹配,但是所需的数据分布在具有不同字段名称的多个表中。
我在适用的相应字段(即LOCATION_ID-> STATE_ID)上做了一个人行横道,而我们的数据中不存在某些字段。我的问题是概念性的,因为我不确定最好的方法是什么。 正确方向的任何指点都会有所帮助。 我最熟悉Python,并且正在考虑使用Pandas脚本或R脚本重做数据并导出到新表,但是我敢肯定,在标准SQL或t-SQL中有更优雅的解决方案。
编辑:
每个建议的示例:
源表
SITE_USE
未知
海拔
ELEV_METHOD
ELEV_DATUM
新表格
井号
井水水位计指示器
地表高程值(ft)
地面高程方法
地面高程基准
答案 0 :(得分:0)
SQL查询可以直接连接具有alias
列名的表
SELECT C.Id AS Identifier, C.LastName + ', ' + C.FirstName AS CustomerName
FROM Order O JOIN Customer C ON O.CustomerId = C.Id
这里Order
是一个表,Customer
是另一个表
每个表分别具有别名标识符O
和C
CustomerName
是由两列组成的不存在的列
Identifier
是Id
表中为Customer
表中的C.Id
赋予的别名,
以同样的方式可以连接另一个表,依此类推
ON O.CustomerId = C.Id
表示客户表和订单表在该列中具有相同的数据
答案 1 :(得分:0)
我正在考虑一个视图。
在Oracle中,有Scott的示例架构,其中包含有关员工和部门的表。一个简单的查询,其中没有任何列的映射,如下所示:
SQL> select e.deptno, d.dname, e.empno, e.ename, e.job, e.sal
2 from emp e join dept d on e.deptno = d.deptno
3 where d.deptno = 10;
DEPTNO DNAME EMPNO ENAME JOB SAL
---------- -------------- ---------- ---------- --------- ----------
10 ACCOUNTING 7782 CLARK MANAGER 2450
10 ACCOUNTING 7839 KING PRESIDENT 5000
10 ACCOUNTING 7934 MILLER CLERK 1300
SQL>
现在,如果可以(为什么不能呢?)为您的表创建这样的查询,一个简单的选择是创建一个视图并进行列映射。例如,与上述设置相同的列:
SQL> create or replace view v_emps as
2 select e.deptno as dept_number,
3 d.dname as dept_name,
4 e.empno as employee_id,
5 e.ename as employee_name,
6 e.job,
7 e.sal as salary
8 from emp e join dept d on e.deptno = d.deptno;
View created.
SQL>
最后,这是一个简单的查询问题,即使用全新的列名来获取所需数据并将其提供给需要的人:
SQL> select * from v_emps
2 where dept_number = 10;
DEPT_NUMBER DEPT_NAME EMPLOYEE_ID EMPLOYEE_N JOB SALARY
----------- -------------- ----------- ---------- --------- ----------
10 ACCOUNTING 7782 CLARK MANAGER 2450
10 ACCOUNTING 7839 KING PRESIDENT 5000
10 ACCOUNTING 7934 MILLER CLERK 1300
SQL>
不需要其他映射;执行任何类型的查询,它将完成:
SQL> select * from v_emps
2 where job = 'CLERK';
DEPT_NUMBER DEPT_NAME EMPLOYEE_ID EMPLOYEE_N JOB SALARY
----------- -------------- ----------- ---------- --------- ----------
10 ACCOUNTING 7934 MILLER CLERK 1300
20 RESEARCH 7876 ADAMS CLERK 1100
20 RESEARCH 7369 SMITH CLERK 800
30 SALES 7900 JAMES CLERK 950
SQL>
如果您使用的是MS SQL Server(关于您提到的T-SQL),也没有问题;那里也有景色。