2013-09-05 44 views
-3

我遇到以下問題。你能告訴我什麼是EMD_1.*。*在SQL Server 2008中執行t-sql語句

WITH EMD as (
    SELECT  
     ,attribute1 
     ,attribute2 
     ,attribute3 
     ,ROW_NUMBER() OVER (PARTITION BY attribute1 
          ORDER BY attribute3) as _RN 
     ,attribute4 
     ,attribute5 
    FROM   
     table_name1 
) 
select 
    EMD_1.* 
    ,isnull(EMD_1.attribute1,'_profitcenter nd') as ProfitCenterName 
    ,EMD_1.attribiute2 as PC_ID 
FROM 
    EMD as EMD_1 
JOIN 
    table_name2 
+1

意味着從表'EMD_1'的所有列? –

+0

或者你問的結果集是什麼樣子,由於分區? – Mike

回答

1

EMD_1EMD的別名。 EMD_1.*選擇EMD_1中的所有列。

看看在SELECT clause語法,SELECT子句中的選擇列表可以是以下:

... 
<select_list> ::= 
    { 
     * 
     | { table_name | view_name | table_alias }.* 
     | { 
... 

所以,你可以把*tablename.*table_alias.*

2

它選擇所有來自EMD_1別名的列(EMD表的別名)。

0

EMD_1。*只是EMD_1表中的所有列。

0

EMD_1是EMD的別名,在此特定上下文中,您不需要別名該表。當您將表加入自己時,爲同一個表使用不同的別名會變得很重要。

Select t1.* 
From table as t1 
inner join table t2 
    on t1.column = t2.column 
1

只是爲了澄清的東西 - EMD_1.*確實意味着「從EMD_1所有列」和EMD_1在這種情況下,僅僅是EMD的別名(顯然沒有很好的理由)。

但是,這是不是與上述查詢中說的SELECT *相同。如果您使用SELECT *,那麼您將從EMD_1 table_name2獲得全部列。

這可能是SQL的作者爲什麼包含EMD_1的原因。 *之前,因爲他們只想從EMD_1的所有列...