【问题标题】:Field Aliasing in queries, nzsql查询中的字段别名,nzsql
【发布时间】:2014-06-16 14:43:56
【问题描述】:

我在 Netezza 工作——或者,你知道,纯数据分析——nzsql,但我认为这是一个 ANSI SQL 问题。这个问题太简单了,我什至不知道如何搜索它。

CREATE TEMPORARY TABLE DEMO1 AS SELECT 'SMORK' AS SMORK, 'PLONK' AS PLONK, 'SPROING' AS SPROING;

SELECT SMORK AS PLONK, PLONK, SPROING AS CLUNK, CLUNK
FROM DEMO1;

这会返回'SMORK, PLONK, SPROING, SPROING',也就是说,查询可以重用CLUNK 别名,但是PLONK 别名会被源表中的列覆盖。现在,如果我真的想要源表中的列,我可以编写 SELECT SMORK AS PLONK、DEMO1.PLONK 等,但我不知道如何指定我更喜欢我之前定义的别名SELECT 子句。

有人知道方法吗?

【问题讨论】:

    标签: sql netezza


    【解决方案1】:

    在Netezza中,选择列时,Netezza会先搜索表列,再搜索别名。

    示例: 假设我们有以下语句:

    CREATE TEMPORARY TABLE EMPLOYEES AS 
    SELECT 1001 AS EMPLOYEE_ID
          ,'Alex' AS FIRST_NAME
          ,'Smith' AS LAST_NAME
          ,'Alex J. Smith' AS FULL_NAME;
    
    SELECT 
         EMPLOYEE_ID
        ,FIRST_NAME
        ,LAST_NAME
        ,LAST_NAME||', '||FIRST_NAME AS FULL_NAME
        ,'My full name is :'||FULL_NAME AS DESCRIPTION
      FROM EMPLOYEES;
    

    它会返回

    EMPLOYEE_ID FIRST_NAME LAST_NAME FULL_NAME 描述 1001 Alex Smith Smith, Alex 我的全名是:Alex J. Smith

    注意在DESCRIPTION 中,FULL_NAME 值是从表列中选取的,而不是从别名中选取的。

    如果您希望DESCRIPTION列使用别名FULL_NAME中的值,您可以分两步完成:

    第 1 步。创建一个包含您想要的所有列的子查询。对于您想要重用的所有别名,您需要将它们命名为 FROM 子句的任何表列中都不存在的名称;

    第 2 步。从子查询中仅选择您想要的列。

    CREATE TEMPORARY TABLE EMPLOYEES AS SELECT 1001 AS EMPLOYEE_ID, 'Alex' AS FIRST_NAME, 'Smith' AS LAST_NAME, 'Alex J. Smith' AS FULL_NAME;
    
    WITH EMPLOYESS_TMP AS (
    SELECT 
         EMPLOYEE_ID
        ,FIRST_NAME
        ,LAST_NAME
        ,LAST_NAME||', '||FIRST_NAME AS FULL_NAME2
        ,FULL_NAME2 AS FULL_NAME
        ,'My full name is :'||FULL_NAME2 AS DESCRIPTION
      FROM EMPLOYEES)
    SELECT 
         EMPLOYEE_ID
        ,FIRST_NAME
        ,LAST_NAME
        ,FULL_NAME
        ,DESCRIPTION
     FROM EMPLOYESS_TMP;   
    

    这将返回你想要的:

    EMPLOYEE_ID FIRST_NAME LAST_NAME FULL_NAME 描述 1001 Alex Smith Smith, Alex 我的全名是:Smith, Alex

    【讨论】:

      【解决方案2】:

      只需更改列的顺序即可。 Netezza 尝试使用您的别名,以便您可以重命名列或更改顺序。

      SELECT SMORK AS PLONK, PLONK, CLUNK, SPROING AS CLUNK
      FROM DEMO1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 2012-06-06
        • 2017-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多