[BILL WEI]SQL 如何将查询到的列作为表名去查询数据
我们在做sql查询的时候,有时候需要将查询的列作为表名,去引用,然后再次查询
declare @table_name varchar(20)
select @table_name=table_name from a where <条件>
exec('select * from '+@a) 此sql其实就是先将sql拼接成字符串,然后再将字符串转成sql指令,如果查询到的结果只有一
列的时候,我们可以这样做,如果
@table_name的值有多个,则无法运用此方法
但是,如果碰到这种情况,我们查询的表名并不只有一列,而是多列,则无法运用此方法
这个时候,我们可以采用union ,通过关联不同的表名,来取到对应表的数据,然后再
将所有数据拼接起来,得到最终的结果
SELECT
A.业务号 AS '业务号',
A.提单号 AS '提单号',
A.委托方KID AS '委托方KID',
A.货主KID AS '货主KID',
CAST(A.计费吨 as decimal(20,3)) AS '计费吨',
A.收付类型 AS '收付类型',
convert(varchar(10),A.业务日期,120) AS '业务日期',
CAST(A.实际金额 as decimal(20,2)) AS '实际金额',
A.币种 AS '币种'
FROM (
SELECT ASN.ORDER_NO AS '业务号',
ASN.BL_NO AS '提单号',
EXT.CORPORATION_ID AS '委托方KID',
CUS.CORPORATION_ID AS '货主KID',
CASE WHEN ASN.GROSS_WEIGHT>ASN.VOLUME THEN ASN.GROSS_WEIGHT ELSE ASN.VOLUME END AS '计费吨',
CASE WHEN F.AR_AP='AR' THEN '应收' ELSE '应付' END AS '收付类型',
ASN.FINISHED_TIME AS '业务日期',--记账日期
F.ACTUAL_AMOUNT AS '实际金额',
F.ORGIANL_CURRENCY AS '币种'
FROM F_CHARGE F
INNER JOIN WMS_ASN ASN
ON ASN.KID=F.JOB_ID
INNER JOIN D_CORPORATION_EXT CUS --货主
ON CUS.KID=ASN.CUSTOMER_ID
INNER JOIN D_CORPORATION_EXT EXT --委托方
ON EXT.KID=ASN.CONSIGNER
WHERE F.JOB_TYPE='WMS_ASN'
UNION ALL
SELECT CDO.ORDER_NO AS '业务号',
CDO.BL_NO AS '提单号',
EXT.CORPORATION_ID AS '委托方KID',
CUS.CORPORATION_ID AS '货主KID',
CASE WHEN CDO.GROSS_WEIGHT>CDO.VOLUME THEN CDO.GROSS_WEIGHT ELSE CDO.VOLUME END AS '计费吨',
CASE WHEN F.AR_AP='AR' THEN '应收' ELSE '应付' END AS '收付类型',
CDO.FINISHED_TIME AS '业务日期',--记账日期
F.ACTUAL_AMOUNT AS '实际金额',
F.ORGIANL_CURRENCY AS '币种'
FROM F_CHARGE F
INNER JOIN WMS_CDO CDO
ON CDO.KID=F.JOB_ID
INNER JOIN D_CORPORATION_EXT CUS --货主
ON CUS.KID=CDO.CUSTOMER_ID
INNER JOIN D_CORPORATION_EXT EXT --委托方
ON EXT.KID=CDO.CONSIGNER
WHERE F.JOB_TYPE='WMS_CDO'
) AS A
ORDER BY
A.业务号,
A.提单号,
A.委托方KID,
A.货主KID
在此sql中,其实F_CHARGE表中的JOB_TYPE里面存的是表名,JOB_ID里面存的是
表对应的ID,我们需要根据不同的JOB_TYPE,从不同表里面取到不同的数据,这个
时候,我们就可以通过不同的表名,来union不同的语句,最后就不同的查询列拼
接起来得到最终结果。
[BILL WEI]SQL 如何将查询到的列作为表名去查询数据的更多相关文章
- sqlite 查询数据库中所有的表名,判断某表是否存在,将某列所有数值去重后获得数量
1.列出当前db文件中所有的表的表名 SQL语句:SELECT * FROM sqlite_master WHERE type='table'; 结构如下: 注:网上有人说可以带上db文件的名称,如: ...
- sql的嵌套查询,把一次查询的结果做为表继续进一步查询;内联视图
Mysql的嵌套表查询 嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询可以: 出现在Where子句中, 出现在from子句中,作为一个临时表使用, ...
- Sql Server根据表名生成查询的存储过程(查询条件可选)
static void Main(string[] args) { string 表名 = "water_emstime"; string sql = "exec Get ...
- MySQL 子查询(三) 派生表、子查询错误
From MySQL 5.7 ref:13.2.10.8 Derived Tables 八.派生表 派生表是一个表达式,用于在一个查询的FROM子句的范围内生成表. 例如,在一个SELECT查询的FR ...
- SQLSERVER | 查询数据库中所有的表的名字 | 查询数据库中的所有数据库名
SQLSERVER 1.查询某个数据库中所有的表名: SELECT Name FROM SysObjects Where XType='U' ORDER BY Name 2.查询数据库中的所有数据库 ...
- Mysql查询的一些操作(查表名,查字段名,查当月,查一周,查当天)
查询数据库中所有表名 select table_name from information_schema.tables where table_schema='tools' and table_typ ...
- Mysql 查询出某列字段 被包含于 条件数据中
我们通常是使用 某条件 是否包含于 某列中 ,简单点 就是:select * from 表名 where 字段名 like '%条件数据%'; 现在说下 某列 被包含于 条件数据中 接下 ...
- 【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入
文章目录 1.数据库基础 1.1 数据库(database) 1.2 表(table) 1.3 列和数据类型 1.4 行 1.5 主键 2.什么是SQL 3.创建后续练习所需数据库.表(MySQL8. ...
- [BILL WEI]SQL 存储过程学习
--查看数据库exec sp_databases ;--查看表exec sp_tables ;--查看列exec sp_columns WMS_ASN;--查看索引exec sp_helpindex ...
随机推荐
- parseInt()、parseFloat()与Number()的比较
我有一个同学最近在自学JavaScript,偶尔遇到问题了会让我帮忙解决,虽然我也是一个JavaScript菜鸟,但是我还是很乐意帮忙,这样不仅可以帮到别人,也可以让自己在解决问题的过程中学到更多知识 ...
- 客户端(android,ios)与服务器通信
android,ios客户端与服务器通信为了便于理解,直接用PHP作为服务器端语言 其实就是一个 http请求响应的过程序,先从 B/S模式说起浏览器发起http请求,服务器响应请求,并把数据返回给浏 ...
- python使用mysqldb连接数据库操作方法示例详解
这篇文章主要介绍了python mysqldb使用方法,大家参考使用 复制代码代码如下: # -*- coding: utf-8 -*- #mysqldb # site www.jbxue.com ...
- CentOS 根据命令查所在的包
在工作中经常会遇到想用某个命令机器没装却又不知道命令在哪个包(源码编译不再本文范围内),下面介绍个比较笨的方法可以帮助我们搞定这个问题. 说明:蓝色=命令名称 浅绿=命令参数 ...
- SET QUOTED_IDENTIFIER ON
语法 SET QUOTED_IDENTIFIER { ON | OFF } 注释 当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔 ...
- linux磁盘设备知识
linux分区数字编号: 1.分区数字编号1至4留给主分区或扩展分区使用,逻辑分区编号从5开始. 2.IDE硬盘设备名均以/dev/hd开头,不同硬盘编号依次是/dev/hda/./dev/hdb./ ...
- 1-了解Python
为什么使用python: 软件质量: 可读写.一致性.软件质量 支持软件开发的高级重用机制 提供开发者的效率: 代码只有java或C++的1/5~1/3 无须编译链接,提高了程序原的效率 程序的可移植 ...
- BZOJ Tyvj 1729 文艺平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
- C++编写操作系统(1):基于 EFI 的 Bootloader
很久以前就对操作系统很好奇,用了这么多年Windows,对他的运作机理也不是很清楚,所以一直想自己动手写一个,研究一下操作系统究竟是怎么实现的.后来在网上也找到过一些教程(比如:<自己动手写操作 ...
- c++ 联合体
联合体分配的内存大小是成员变量中最大变量的大小 联合体的成员变量共享内存 小段模式(X86就是) 低位数据存在低地址单元 大端模式 高位字节存在低地址单元