2013-04-23 83 views
5

我知道我可以指定像這樣列別名:SQL使用列名的別名,而不選擇

SELECT stuff as mask 

有沒有我可以指定列別名沒有返回的結果列數據集的方法嗎?從本質上講,我希望能夠讓我的查詢乾淨做:

SELECT doManipulationStuff(cleanCompactAlias) 

reallyLong.misleading.andAnnoying.columnName as cleanCompactAlias 

回答

4

您可以使用公用表表達式(CTE)創建具有別名的子查詢:

WITH clean_cte AS 
(
    SELECT reallyLong.misleading.andAnnoying.columnName1 as cleanCompactAlias1, 
    reallyLong.misleading.andAnnoying.columnName2 as cleanCompactAlias2 
) 
SELECT doManipulationStuff(cleanCompactAlias1), 
    doManipulationStuff(cleanCompactAlias2) 

通過這種方式,您可以將所有別名放入CTE中,並在調用函數時忘記它。您仍然需要在別處進行別名,但這至少可以將其保留在主要查詢中,使其更具可讀性。

+0

...只有當您使用支持它的SQL Server版本時。 – Yuck 2013-04-23 17:32:43

+0

還有其他支持CTE的RDBMS。但是要指出 - 並非所有人都支持這種語法。我相信MySQL不會。 – 2013-04-23 17:35:47

3

你可以使用子查詢:

select doManipulationStuff(cleanCompactAlias) 
from (select t.*, reallyLong.misleading.andAnnoying.columnName as cleanCompactAlias 
     . . . 
    ) t