在Teradata中选择值

Pet*_*mit 3 sql teradata

我知道,在其他SQL风格(T-SQL)中,可以不通过表“选择”提供的数据。喜欢:

SELECT *
FROM (VALUES (1,2), (3,4)) tbl
Run Code Online (Sandbox Code Playgroud)

如何使用Teradata做到这一点?

Gor*_*off 5

Teradata为此具有奇怪的语法:

select t.*
from (select * from (select 1 as a, 2 as b) x
      union all
      select * from (select 3 as a, 4 as b) x
     ) t;
Run Code Online (Sandbox Code Playgroud)

  • 哇,很多嵌套。但它运行。 (2认同)

rav*_*oli 1

我无法访问 TD 系统进行测试,但您也许可以从上面的答案中删除其中一个嵌套 SELECT:

select x.*
from (
  select 1 as a, 2 as b
  union all
  select 3 as a, 4 as b
) x
Run Code Online (Sandbox Code Playgroud)

如果您需要生成一些随机行,您始终可以从系统表中执行 SELECT,例如 sys_calendar.calendar:

SELECT 1, 2
FROM sys_calendar.calendar
SAMPLE 10;
Run Code Online (Sandbox Code Playgroud)

更新的示例:

SELECT TOP 1000 -- Limit to 1000 rows (you can use SAMPLE too)
    ROW_NUMBER() OVER() MyNum, -- Sequential numbering
    MyNum MOD 7, -- Modulo operator
    RANDOM(1,1000), -- Random number between 1,1000
    HASHROW(MyNum) -- Rowhash value of given column(s)
FROM sys_calendar.calendar; -- Use as table to source rows
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • 确保您选择一个始终存在且包含行的系统表
  • 如果您需要的行数多于源表中可用的行数,请执行 UNION 来获取更多行
  • 您始终可以轻松创建单列表并通过 INSERT/SELECT 将其填充到您想要的任意行数:

    创建虚拟表(c1 INT);-- 创建表
    INSERT INTO DummyTable(1); -- 种子表
    INSERT INTO DummyTable SELECT * FROM DummyTable; -- 运行此命令以重复行,次数不限

然后使用此表创建您想要的任何结果集,类似于上面使用 sys_calendar.calendar 的查询。

我没有要测试的 TD 系统,因此您可能会遇到语法错误...但这应该会给您一个基本的想法。