Netezza/SQL 列别名将文本与参数值连接起来

Posted

技术标签:

【中文标题】Netezza/SQL 列别名将文本与参数值连接起来【英文标题】:Netezza/SQL Column Alias concatenate text with parameter value 【发布时间】:2015-08-31 18:26:41 【问题描述】:

在下面的存储过程中,我只是想根据一个参数值创建一个列别名。看起来很简单,但我找不到答案。

CREATE OR REPLACE PROCEDURE "SP"(INTEGER, INTEGER)
RETURNS INTEGER
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    whichyear ALIAS FOR $1;

BEGIN
    Select  x as "Some Text" + whichyear  from some table...

 ;
END;
END_PROC;

【问题讨论】:

这看起来不像 SQL Server 代码。 Netezza SQL。即使我得到类似目的的 SQL Server 代码,它也会有很大帮助。 在 SQL Server 中,您必须使用动态 SQL 来执行此操作。对 Netezza 一无所知。 谢谢,您能否为此类示例提供动态 SQL 示例。 Netteza SQL 与 SQL Server 超级相似。在这种情况下,我也许可以解决它。 【参考方案1】:

Tab 是正确的,这需要在 Netezza 中使用动态 SQL。这是一个例子。

CREATE OR REPLACE PROCEDURE "SP"(INTEGER)
RETURNS INTEGER
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
    whichyear ALIAS FOR $1;
    vSQL varchar(30000);

BEGIN
    drop table the_results if exists;

    vSQL := 'CREATE TABLE THE_RESULTS AS SELECT COL1 "SOME TEXT ' || whichyear || '" FROM TABLE_A;';

    execute immediate vSQL;

END;
END_PROC;

这是输出。

TESTDB.ADMIN(ADMIN)=> exec SP(5);
 SP
----

(1 row)

TESTDB.ADMIN(ADMIN)=> select * from the_results;
 SOME TEXT 5
-------------
           2
           3
           1
(3 rows)

【讨论】:

谢谢。这正是我在 Netteza 中应该做的事情。它工作得很好:) 我很高兴它对你有用。如果是这样,请将答案标记为正确。 当然,抱歉,我是 *** 的新成员。感谢您注意到这一点。 欢迎来到 ***!【参考方案2】:

在 SQL Server 中,您可以像这样使用动态 sql:

DECLARE @sql varchar(max) = 'Select  x as SomeText' + @whichyear + ' from sometable';

EXEC(@sql);

【讨论】:

非常感谢。这让我更接近于我正在寻找的东西。

以上是关于Netezza/SQL 列别名将文本与参数值连接起来的主要内容,如果未能解决你的问题,请参考以下文章

具有别名的同一列上的多个连接

如何在laravel eloquent中为左连接表起别名

Netezza SQL 脚本格式

Netezza SQL:用最近的数据填充缺失值

在 SQL 视图中的列选择中使用左连接别名

Git别名与位置参数