我想提取一些Calender Weeks
从年度数据来看。完成后,我想旋转它,以便每个都有一行ID
.
我们有一张桌子DB.MY_CWs
只有一列CW
含有Calender Weeks
我们感兴趣。
以下代码提取相关内容Calender Weeks
.
CREATE TABLE DB.MY_TABLE AS
(
SELECT ID,
WeekNumber_Of_Year(Sales_Date)) AS CW,
AVG(Sales) AS Sales
FROM DB.DataBase_XYZ
WHERE CW IN (SELECT CW FROM DB.MY_CWs)
GROUP BY ID,CW
) WITH DATA;
这段代码给了我们这样的输出:
但是,我想旋转它,以便得到如下输出:
我从代码中得到了帮助here https://stackoverflow.com/questions/49917409/pivot-implementation-in-td/并运行以下命令,但是TeraData
没有响应,也没有错误。
CREATE TABLE DB.MY_TABLE2 AS
(
SELECT *
FROM DB.MY_TABLE
PIVOT
(SUM(Sales) AS Sales
FOR CW IN (SELECT CW FROM DB.MY_CWs)
) AS dt
) WITH DATA;
如果代替(SELECT CW FROM DB.MY_CWs)
我会用(15,16,17)
,然后一切正常,我就得到了旋转表,如上所示。
谁能建议我在哪里犯了错误?
非常感谢。
我试图重现这个场景。
我收到以下错误。
CREATE TABLE Failed. 4306: (-4306)Invalid PIVOT query: PIVOT query with sub-query in IN-List is not supported in DDL statement.
在数据透视表中使用子查询时有一些限制。
道明文档:https://docs.teradata.com/r/Teradata-VantageTM-NewSQL-Engine-Release-Summary/March-2019/Release-16.20-Feature-Update-1-Features/Subquery-Support-in-PIVOT-IN-列表 https://docs.teradata.com/r/Teradata-VantageTM-NewSQL-Engine-Release-Summary/March-2019/Release-16.20-Feature-Update-1-Features/Subquery-Support-in-PIVOT-IN-List
TD 文档的片段
注意事项
多语句请求不支持 IN 列表中带有子查询的 PIVOT。 PIVOT 列是在优化阶段动态决定的。由于这种动态行为,以下是在 IN 列表中包含子查询的 PIVOT 查询的使用注意事项。
- DDL 创建语句不支持。
- 存储过程的游标 FETCH 语句不支持。
- 如果 IN 列表中给出了子查询,则不允许在 PIVOT 查询上执行 SET 操作。
- 无法在 SELECT 列表中显式指定结果 PIVOT 列名称。
- 不支持 ORDER BY 子句。
如果您使用 SQL Assistant,请检查历史记录以获取错误详细信息。
否则,您可以查询 dbc.dbqlogtbl 来检查错误文本。
解决方法:
您可以通过动态 SQL 和存储过程获得所需的输出。
Steps:
- 将子查询的输出转换为字符串。我们可以通过 XMLAGG 来做到这一点。
- 将 Step1 的输出连接到 IN 子句中并执行动态生成的 SQL。
REPLACE PROCEDURE DYNAMIC_PIVOT()
BEGIN
DECLARE Sqltxt VARCHAR(1000);
DECLARE CWtxt VARCHAR(250);
--Convert rows from MY_CWs to comma delimited string
SET CWtxt=(SELECT TRIM( TRAILING ',' FROM ( XMLAGG(CAST(CW AS VARCHAR(10))||',') (VARCHAR(255)) ) ) FROM MY_CWs);
SET Sqltxt=('CREATE TABLE MY_TABLE2 AS
(
SELECT *
FROM MY_TABLE
PIVOT
(SUM(Sales) AS Sales
FOR CW IN ('|| CWtxt ||')
) AS dt
) WITH DATA;') ;
CALL DBC.SYSEXECSQL(Sqltxt);
END;
CALL DYNAMIC_PIVOT();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)