Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.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
在Excel中运行SQL时重新创建NTILE函数_Sql_Excel_Oracle_Plsqldeveloper - Fatal编程技术网

在Excel中运行SQL时重新创建NTILE函数

在Excel中运行SQL时重新创建NTILE函数,sql,excel,oracle,plsqldeveloper,Sql,Excel,Oracle,Plsqldeveloper,我正在从在Excel中创建报表的传统方式进行转换,在Excel中运行SQL时,我一直坚持重新创建NTILE函数(因为那里不存在NTILE函数),即使在Oracle PL/SQL Developer中运行时,我成功地重新创建了NTILE函数 传统方式: SQL脚本存储在Excel工作表中 我编写宏连接到Oracle数据库,然后用SQL脚本打开一个记录集,并将该记录集复制到另一个Excel工作表 新方式: SQL脚本存储在Excel工作表中 Oracle数据库中的表保存为硬盘上的csv文件 我

我正在从在Excel中创建报表的传统方式进行转换,在Excel中运行SQL时,我一直坚持重新创建NTILE函数(因为那里不存在NTILE函数),即使在Oracle PL/SQL Developer中运行时,我成功地重新创建了NTILE函数

传统方式:

  • SQL脚本存储在Excel工作表中
  • 我编写宏连接到Oracle数据库,然后用SQL脚本打开一个记录集,并将该记录集复制到另一个Excel工作表
新方式:

  • SQL脚本存储在Excel工作表中
  • Oracle数据库中的表保存为硬盘上的csv文件
  • 我编写宏以使用Microsoft.Jet.OLEDB.4.0连接到csv文件(而不是打开它),然后使用SQL脚本打开一个记录集,并将该记录集复制到另一个Excel工作表
以新的方式修改SQL脚本,因为在Excel中运行SQL时Oracle中的某些函数和语句不存在(例如:NTILE、RESTRINCE、TRUNC、CASE)。第二部分被改写;余数变为MOD;TRUNC变为INT;案件成为IIF

下面是我的SQL脚本:

  • 创建示例表
  • 最终结果
  • 在Oracle中重新创建NTILE函数(作为中间步骤)
  • 在excelsql中重新创建untile函数
  • 创建表testntile
    (
    appid编号(2),
    样品VARCHAR2(50),
    分数(3)
    );
    全部插入
    转换为testntile(appid、sample、score)值(5,'A',4)
    转换为testntile(appid、sample、score)值(2,'B',6)
    转换为testntile(appid、sample、score)值(3,'C',8)
    转换为testntile(appid、sample、score)值(1,'C',1)
    转换为testntile(appid、sample、score)值(4,'B',2)
    转换为testntile(appid、sample、score)值(8,'C',3)
    转换为testntile(appid、sample、score)值(6,'C',8)
    转换为testntile(appid、sample、score)值(9,'B',9)
    转换为testntile(appid、sample、score)值(7,'C',7)
    转换为testntile(appid、sample、score)值(10,'B',5)
    转换为testntile(appid、sample、score)值(14,'A',2)
    转换为testntile(appid、sample、score)值(12,'C',7)
    转换为testntile(appid、sample、score)值(13,'C',7)
    转换为testntile(appid、sample、score)值(11,'A',9)
    转换为testntile(appid、sample、score)值(15,'C',3)
    转换为testntile(appid、sample、score)值(16,'C',12)
    转换为testntile(appid、sample、score)值(18,'C',12)
    转换为testntile(appid、sample、score)值(17,'C',16)
    转换为testntile(appid、sample、score)值(19,'C',12)
    转换为testntile(appid、sample、score)值(20,'D',14)
    转换为testntile(appid、sample、score)值(21,'D',11)
    从双重选择中选择*;
    犯罪
    --期望的最终结果
    挑选
    第(3)项超过(按样本顺序按分数划分)范围列表,
    s、 *
    来自testntile s;
    --Oracle中的可重构函数
    --(作为在Excel SQL中重新创建NTILE函数的中间步骤)
    挑选
    余数时的情况(
    (选择计数(t2.appid)
    来自testntile t2
    其中t2.sample=t1.sample)
    ,3)  0 
    然后在((选择count(t2.appid))时使用CASE
    来自testntile t2
    其中t2.sample=t1.sample)/3)<1
    然后(选择计数(*)+1
    来自testntile t2
    其中t2.sample=t1.sample
    和(t2.score