2017-07-18 180 views
0

我试图从两个表中选择特定的列,其中一个是派生表,但由于某些原因,我只能选择*从两个表中选择列(内部连接) - 内部连接

这工作:

SELECT *   
FROM   
    (

--Pivot the Custom Fields into a derived table-------------- 

     SELECT [Id], [CustomField], [CustomField2], [CustomField3], [CustomField4], [CustomField5] 
     FROM 
       (
        SELECT [Id], [FieldValue], [FieldName]  
        FROM 
        EntityCustomFieldValues 
        AS t1 
        INNER JOIN Contact t2 ON t1.ParentId = t2.Id 
       )AS SourceTable 

        PIVOT 
        (
        MAX([FieldValue]) FOR [FieldName] IN ([CustomField], [CustomField2], [CustomField3], [CustomField4], [CustomField5]) 
        )AS PivotTable 

----------------------------------------------------------- 
    ) AS t 

    INNER JOIN Contact ON t.Id = Contact.Id 

的问题是,一旦我尽量选择特定列,我得到一个语法错误???

SELECT [t].[Id], [Contact].[FirstName], [t].[CustomField], [t].[CustomField2],   
FROM   
    (

--Pivot the Custom Fields--------------------------------- 

     SELECT [Id], [CustomField], [CustomField2], [CustomField3], [CustomField4], [CustomField5] 
     FROM 
       (
        SELECT [Id], [FieldValue], [FieldName]  
        FROM 
        EntityCustomFieldValues 
        AS t1 
        INNER JOIN Contact t2 ON t1.ParentId = t2.Id 
       )AS SourceTable 

        PIVOT 
        (
        MAX([FieldValue]) FOR [FieldName] IN ([CustomField], [CustomField2], [CustomField3], [CustomField4], [CustomField5]) 
        )AS PivotTable 

---------------------------------------------------- 
    ) AS t 

    INNER JOIN Contact ON t.Id = Contact.Id; 

消息156,级别15,状态1,行 '从' 关键字近4 语法不正确。

Msg 156,Level 15,State 1,Line 25 关键字'AS'附近的语法不正确。

我试图把它包在另一个Select中,但那也不起作用。

+2

你必须第一个'FROM'前的逗号。 –

+0

当你使用'AS SourceTable'时,我不认为你需要关键字'AS',尽管我对SQL服务器不太熟悉,所以我可能会错误 – Hatik

+0

这样花太多时间逗号。 .. ....我总是搞砸了一些世俗的细节... –

回答

1

试试这个:

SELECT [t].[Id] 
    ,[Contact].[FirstName] 
    ,[t].[CustomField] 
    ,[t].[CustomField2] 
FROM (
    --Pivot the Custom Fields--------------------------------- 
    SELECT [Id] 
     ,[CustomField] 
     ,[CustomField2] 
     ,[CustomField3] 
     ,[CustomField4] 
     ,[CustomField5] 
    FROM (
     SELECT [Id] 
      ,[FieldValue] 
      ,[FieldName] 
     FROM EntityCustomFieldValues AS t1 
     INNER JOIN Contact t2 ON t1.ParentId = t2.Id 
     ) AS SourceTable 
    PIVOT(MAX([FieldValue]) FOR [FieldName] IN (
       [CustomField] 
       ,[CustomField2] 
       ,[CustomField3] 
       ,[CustomField4] 
       ,[CustomField5] 
       )) AS PivotTable 
    ---------------------------------------------------- 
    ) t 
INNER JOIN Contact ON t.Id = Contact.Id; 
1

试试这个请:

SELECT [t].[Id], [Contact].[FirstName], [t].[CustomField], [t].[CustomField2] 
    FROM   
    (

--Pivot the Custom Fields--------------------------------- 

     SELECT [Id], [CustomField], [CustomField2], [CustomField3], [CustomField4], [CustomField5] 
     FROM 
       (
        SELECT [Id], [FieldValue], [FieldName]  
        FROM 
        EntityCustomFieldValues t1 
        INNER JOIN Contact t2 ON t1.ParentId = t2.Id 
       ) SourceTable 

        PIVOT 
        (
        MAX([FieldValue]) FOR [FieldName] IN ([CustomField], [CustomField2], [CustomField3], [CustomField4], [CustomField5]) 
        ) PivotTable 

---------------------------------------------------- 
    ) t 

    INNER JOIN Contact ON t.Id = Contact.Id;