Tableau api “如何修复”;[Teradata][ODBC Teradata Driver][Teradata Database]语法错误:子查询中不允许使用ORDER BY。”;表内查询

Tableau api “如何修复”;[Teradata][ODBC Teradata Driver][Teradata Database]语法错误:子查询中不允许使用ORDER BY。”;表内查询,tableau-api,Tableau Api,我正在创建一个查询,以便从将在tableau中使用的teradata中提取数据,我需要修复查询的哪一部分 我在Teradata sql asisstant中尝试过这个查询,它是有效的,但当我移动到tableau时,它总是以错误ORDER BY结束,这在子查询中是不允许的 在teradata sql查询下面: Select ChannelType,Group, LevelType, EXTRACT(YEAR From CDate) as KYear,

我正在创建一个查询,以便从将在tableau中使用的teradata中提取数据,我需要修复查询的哪一部分

我在Teradata sql asisstant中尝试过这个查询,它是有效的,但当我移动到tableau时,它总是以错误ORDER BY结束,这在子查询中是不允许的

在teradata sql查询下面:

    Select  
    ChannelType,Group,
    LevelType,
    EXTRACT(YEAR From CDate) as KYear, 
    EXTRACT(MOnth From CDate) as KMonth, 

    Case 
    when Position('Live' IN modeType) >0 then 'L'
    else 'S'
    end as LS,

    Sum(watch) as Watches,
    Sum(amount) as amounts
    zeroifnull(amounts)/zeroifnull(Watches,)as result,

    CASE 
    WHEN result >0 then 'WIN'
    ELSE 'LOSE'
    END AS WL Class

    From Mart_wodo.data where
    CDate between date'2018-01-01' and date'2018-12-31'  and
    Group in('L1','L2','L3','L4','L5') and
    LevelType NOT IN('0') and 
    Channeltype in('TV','TY,'IG')

    Group By Channeltype , Group, LevelType, KYear, KMonth,LS

    Order BY  KYear, KMonth,Channeltype, Group,LS asc

我猜Tableau正在将您的查询包装在一个外部的
SELECT
,这就是为什么您通过不允许的
错误消息获得
订单,但它在SQL Assistant中的工作方式是一样的

如果是这种情况,您需要删除
orderby
子句,看看是否可以通过Tableau指定最终订单。或者可能将SQL封装在视图中,并通过Tableau访问该视图:

作为一个潜在的黑客(它可能不起作用),您可以尝试对
GROUP BY
列重新排序,或者使用
ORDER BY
子句添加一个虚拟窗口函数,看看这是否有任何效果:

选择
渠道类型,群体,,
...
ROW_NUMBER()(按KYear、KMonth、Channeltype、Group、LS ASC排序)作为RowNum
来自Mart_wodo.data的信息,在哪里
日期'2018-01-01'和日期'2018-12-31'之间的日期,以及
分组在('L1','L2','L3','L4','L5')和
LevelType不在('0')中,并且
频道类型输入('TV','TY','IG')
按KYear、KMonth、Channeltype、Group、LS、LevelType分组

太棒了!!不客气。您是否使用了视图或
orderby
hack?如果你使用了黑客,我会小心处理,因为行为可能会随着TD版本的变化而变化,你可能无法100%依赖它。正如你之前所建议的,我正在虚拟的windows函数中使用“ORDER BY”。而yah似乎与TD发布有关。需要小心使用它,因为TDSA不再可以用作我们希望在tableau中使用它的查询的标准测试平台