2016-12-15 66 views
-1

我在Oracle中为我需要的其他工作生成脚手架视图。一般来说,我只是在甲骨文和SQL中沾沾自喜。ORA-01427 - 子查询返回多个记录

我想这一点:

DATE_  I   II   III 
13-DEC-16 CATEGORY SUBCATEGORY SITE_NAME_A 
13-DEC-16 CATEGORY SUBCATEGORY SITE_NAME_B 
13-DEC-16 CATEGORY SUBCATEGORY SITE_NAME_C 
14-DEC-16 CATEGORY SUBCATEGORY SITE_NAME_A 
14-DEC-16 CATEGORY SUBCATEGORY SITE_NAME_B 
14-DEC-16 CATEGORY SUBCATEGORY SITE_NAME_C 
... 

从这:

SELECT TRUNC (SYSDATE - (3) + (LEVEL)) AS DATE_, 
      'CATEGORY' AS I, 
      'SUBCATEGORY' AS II,     
      (SELECT UNIQUE VENDOR_SITE_CODE FROM AP_INVOICES_V WHERE VENDOR_NAME = 'SOMETHING') AS III 
    FROM DUAL 
    CONNECT BY LEVEL <= (SYSDATE - (SYSDATE - (3))) 

当然,这工作,如果子查询返回单个记录,但抛出了“太多记录”错误什么时候不能。我该如何解决这个问题?我希望获得额外的记录,因为它们是新的网站名称,但不知道如何将它们插入到视图中。

谢谢!

编辑:为了澄清,供应商可能有多个vendor_site,这就是当太多记录错误合并时。 还指出输出示例是错误的,纠正它。

+0

使用Oracle的分析功能LISTAGG与分区添加新站点名称在此之前,被标记为重复tyake看看http://stackoverflow.com/questions/2108194/oracle-equivalent-to-sql-server-stuff-function? – B540Glenn

+0

我觉得你需要加入,但我不明白你想要完成什么。例如,您想如何将网站名称与日期绑定?为什么site_name_a在13-dec-16而不是14-dec-16?有规定吗? – arturro

+0

'我该如何解决这个问题?' - id取决于您想如何在报告中显示这些额外的记录。这个错误仅仅意味着,有超过1个网站使用'VENDOR_NAME ='SOMETHING''。你想展示他们吗?或者只挑一个随机站点? – krokodilko

回答

0

可能是你寻找ListAGG对于一个(SELECT UNIQUE VENDOR_SITE_CODE FROM AP_INVOICES_V WHERE VENDOR_NAME = 'SOMETHING') AS III

+0

我想要做的实际上是ListAgg的逆。 –

0

如果你需要新的站点名称为附加行,然后 ,而不是使其成为一个子查询,与主表连接,并使用不同的,以避免重复记录。添加或删除WHERE子句根据您的需要

如果你想在现有的再行通过VENDOR_NAME

SELECT TRUNC (SYSDATE - (3) + (LEVEL)) AS DATE_, 
      'CATEGORY' AS I, 
      'SUBCATEGORY' AS II,     
     (SELECT DISTINCT LISTAGG(VENDOR_SITE_CODE,',') WITHIN GROUP (ORDER BY VENDOR_SITE_CODE) OVER (PARTITION BY VENDOR_NAME) FROM AP_INVOICES_V WHERE VENDOR_NAME='VENDOR1') AS III 
    FROM DUAL 
    CONNECT BY LEVEL <= (SYSDATE - (SYSDATE - (3))) 
+0

谢谢你Vija,但这需要永远,甚至不能测试它。 –

+0

@ GabrielA.Zorrilla您正在尝试哪个查询以及您的表有多少行? –