Teradata:数据透视中的 IN 子句无法从表中获取数据

2024-04-19

我想提取一些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:

  1. 将子查询的输出转换为字符串。我们可以通过 XMLAGG 来做到这一点。
  2. 将 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(使用前将#替换为@)

Teradata:数据透视中的 IN 子句无法从表中获取数据 的相关文章

  • C# 和 SQL Server 中嵌套 using 的用法

    这个线程是一个延续是否有理由在 C 中使用子句检查多个内部的 null https stackoverflow com questions 2220422 is there a reason to check for null inside
  • 实体框架可以在本地工作,但不能在 azure 上工作

    我有一个在本地完美运行的网络项目 但是 当我更改 Azure 上发布的网站中的连接字符串以连接到 SQL Azure 上的数据库时 它将开始出现此错误 System Data Entity Infrastructure Unintentio
  • 包含对 char(13) 不满意

    为什么不会SSMS为我处理这个脚本 DECLARE containsReturn AS CHAR 500 email protected cdn cgi l email protection email protected cdn cgi
  • 如何使用 JDBC 执行过程

    这是我的功能 public static void execute delete on db String pass String login String port String host String table name String
  • Java - oracle.jdbc.dcn.DatabaseChangeEvent - 获取更改的行

    我正在使用 oracle jdbc dcn DatabaseChangeEvent 来从 Oracle DB 获取事件通知 public class TListener implements DatabaseChangeListener p
  • TSQL动态确定SP/Function的参数列表

    我想将通用日志记录片段写入存储过程集合中 我写这篇文章是为了对我们的前端用户体验进行定量测量 因为我知道前端软件使用了哪些 SP 以及它们的使用方式 我想在开始性能调优之前使用它来收集基线 然后显示调优的结果 我可以动态地从 PROCID
  • 按 IN 值列表排序

    我在 PostgreSQL 8 3 中有一个简单的 SQL 查询 它捕获了一堆评论 我提供一个sorted的值列表IN构造在WHERE clause SELECT FROM comments WHERE comments id IN 1 3
  • 检测递归查询中的循环

    我的 PostgreSQL 数据库中有一个有向图 节点和循环之间可以有多个路径 create table edges from int to int insert into edges values 0 1 1 2 2 3 3 4 1 3
  • 对于我的智力来说,太多的 order by、max、子查询

    我似乎无法解决这个问题 我确信它需要子查询 但我没有选择 我的大脑无法处理这个或其他事情 我需要帮助 小介绍 我有一个投注赔率网站 每 15 分钟 我都会从不同的博彩公司导入特定赛事的最新赔率 赢 平 输 或 1 X 2 赔率表的每一行都有
  • Sql Server 2005 将列名放在方括号中

    我最近将数据库从 Sql Server 2000 迁移到 Sql Server 2005 在表设计器中 它坚持将方括号放在名为 Content 的列周围 我在 Sql Server 的保留字列表中没有看到 Content 所以我不明白它为什
  • Oracle 10 中的本地临时表(适用于存储过程的范围)

    我是甲骨文新手 我需要在存储过程中处理大量数据 我正在考虑使用临时表 我正在使用连接池 并且该应用程序是多线程的 有没有一种方法可以为每次调用存储过程创建不同的表实例来创建临时表 以便来自多个存储过程调用的数据不会混淆 你说你是 Oracl
  • 如何在 PL/SQL 中将列添加到现有表之前检查列是否存在?

    在向 Oracle 数据库的表中添加列之前 如何添加简单的检查 我已经包含了用于添加列的 SQL ALTER TABLE db tablename ADD columnname NVARCHAR2 30 可以使用以下视图之一访问有关 Ora
  • SQL查询;水平到垂直

    我遇到了涉及将水平行转换为垂直行的 SQL 查询 SQL Server 以下是我的数据 No Flag 1 Flag 2 Flag 3 A 1 2 3 B 4 1 6 转换后 该表应为 No FlagsName Flag value A F
  • 物化视图与表:有什么优点?

    我很清楚为什么物化视图比仅查询基表更可取 不太清楚的是与仅创建另一个具有与 MV 相同数据的表相比的优势 MV 的唯一优势真的只是易于创建 维护吗 MV 不是相当于具有匹配架构的表和使用 MV SELECT 语句的 INSERT INTO
  • 如何在不使用完整备份的情况下使用生产数据刷新 SQL Server 测试实例

    我有两台 MS SQL 2005 服务器 一台用于生产 一台用于测试 并且两台服务器的恢复模型均为 完整 我将生产数据库的备份恢复到测试服务器 然后让用户进行更改 我希望能够 回滚对测试 SQL 服务器所做的所有更改 应用自测试服务器最初恢
  • Oracle:在更新具有多列的表的一个字段时复制行

    有没有一种方法可以一般复制一行 特别是在不指定所有列的情况下 在我的情况下 我有一个大表 我想在其中复制除 ID 和另一列之外的所有列 事实上 数据是在年初复制的 该表有 50 多列 因此如果我不必指定所有列 则更改架构会更加灵活和稳健 这
  • 在没有条件的情况下,如何使查询不返回任何内容?

    相当简单 我有一对多 多对一关系 我想查询它 但是 当未提供任何 WHERE 子句信息时 我不希望返回任何结果 简单来说 如何使查询变得非贪婪 您可以添加一个始终为 false 的 where 子句 并附加您想要用 OR 提供的条件 sel
  • 如何通过csv文件仅更新sql表的一列

    我有一个 csv 文件包含一些数据 在我的 Sql 数据库中 我有一个具有多个列名的表 现在我只想通过 csv 文件更新一列 谢谢 你可以这样尝试 Import the csv file to a temp table Update you
  • 无法绑定多部分标识符

    我在 SO 上看到过类似的错误 但我找不到解决我的问题的方法 我有一个 SQL 查询 例如 SELECT DISTINCT a maxa b mahuyen a tenxa b tenhuyen ISNULL dkcd tong 0 AS
  • 将列从日期转换为日期时间

    我有一个名为Lastmodified 数据类型为Date 但本来应该是DateTime 有没有办法转换列 当我使用 SQL Server Management Studio 的 设计 功能时 出现以下错误 不允许保存更改 您所做的更改需要以

随机推荐