Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Sql Oracle-有没有办法在单个Select语句中编写此查询?_Sql_Oracle_Oracle11g_Pivot - Fatal编程技术网

Sql Oracle-有没有办法在单个Select语句中编写此查询?

Sql Oracle-有没有办法在单个Select语句中编写此查询?,sql,oracle,oracle11g,pivot,Sql,Oracle,Oracle11g,Pivot,我有以下疑问: SELECT * FROM ( SELECT * FROM View_ExecutiveForecastReport WHERE WORKGROUPID IN (94) ) PIVOT (SUM(COURSELENGTH) AS LENGTH FOR (WORKGROUPID) IN ( 94 as "B2B", 66 as "CFS", 69 as "800IB", 76 as "TSData", 99 as "RetailSales", 103 as "Te

我有以下疑问:

SELECT * FROM (
    SELECT * FROM View_ExecutiveForecastReport
    WHERE WORKGROUPID IN (94)
)
PIVOT  (SUM(COURSELENGTH) AS LENGTH FOR (WORKGROUPID) IN (
94 as "B2B",
66 as "CFS",
69 as "800IB",
76 as "TSData",
99 as "RetailSales",
103 as "Telesales"
))
我想用一个SELECT而不是嵌套来编写它。我试过:

SELECT * FROM View_ExecutiveForecastReport
WHERE WORKGROUPID IN (94)
PIVOT  (SUM(COURSELENGTH) AS LENGTH FOR (WORKGROUPID) IN (
94 as "B2B",
66 as "CFS",
69 as "800IB",
76 as "TSData",
99 as "RetailSales",
103 as "Telesales"
))
但是我得到了错误:ORA-00933:SQL命令没有正确结束

我也试过:

SELECT * FROM View_ExecutiveForecastReport
PIVOT  (SUM(COURSELENGTH) AS LENGTH FOR (WORKGROUPID) IN (
94 as "B2B",
66 as "CFS",
69 as "800IB",
76 as "TSData",
99 as "RetailSales",
103 as "Telesales"
))
WHERE WORKGROUPID IN (94)
这给了我一个错误:ORA-00904:“工作组ID”:无效标识符


如果删除WHERE子句,查询工作正常。我也对使用CTE的解决方案持开放态度。

这不起作用,因为PIVOT是FROM子句表参考部分的一部分,这就是为什么它起作用的原因:

SELECT * FROM View_ExecutiveForecastReport
PIVOT  (SUM(COURSELENGTH) AS LENGTH FOR (WORKGROUPID) IN (
94 as "B2B",
66 as "CFS",
69 as "800IB",
76 as "TSData",
99 as "RetailSales",
103 as "Telesales"
))

由于workgroupid在PIVOT转换中不作为列返回,因此不能在WHERE子句中使用它。SELECT*FROM(subquery)PIVOT的使用非常普遍,因此我建议您使用它。

我决定也发布一个CTE版本的工作查询,尽管我不知道这是否比我原来的工作查询有任何优势

WITH V AS (SELECT * FROM View_ExecutiveForecastReport WHERE WORKGROUPID IN (94))
    SELECT * FROM V
    PIVOT  (SUM(COURSELENGTH) AS LENGTH FOR (WORKGROUPID) IN (
    94 as "B2B",
    66 as "CFS",
    69 as "800IB",
    76 as "TSData",
    99 as "RetailSales",
    103 as "Telesales"
    ))

当我尝试这个时,我得到了
ORA-00904:“WORKGROUPID”:无效标识符
Oops,我错过了。请记住,PIVOT会更改由FROM表示的表,因此,除非您将其表示为PIVOT的一部分,否则它将不存在于返回的列中。只使用原始版本。好的,那么官方的答案是,如果不使用嵌套查询,就没有办法做到这一点?我不知道官方的情况,但看起来是这样的。我现在手头没有11g实例可以试用,否则我会更深入地研究它。仔细想想,这样可能更好。你在子选择中进行过滤,所以枢轴只需针对较小的数据集运行,而不是对所有数据进行枢轴,然后选择你需要的部分。它仍然进行子选择,所以我怀疑它是相同的。是的,这可能只是语法首选项。