2016-06-08 83 views
1
SELECT CMS_ORGANIZATION.ORG_ACTOR_GUID, CMS_EMPLOYMENT.PERIOD_TO AS EventDate, CMS_INDIVIDUAL.FULL_NAME as Name, 'Ceased' AS EventType, 'Overseeing Executive Director' AS TypeOfChange, CMS_ORGANIZATION.REG_NAME 
    FROM CMS_EMPLOYMENT INNER JOIN CMS_INDIVIDUAL ON CMS_EMPLOYMENT.EMPLOYEE_ACTOR_GUID = CMS_INDIVIDUAL.IND_ACTOR_GUID INNER JOIN 
     CMS_ROLE_ASSUMED ON CMS_EMPLOYMENT.ROLE_ASSUMED_GUID = CMS_ROLE_ASSUMED.ROLE_ASSUMED_PK INNER JOIN CMS_ORGANIZATION ON CMS_ROLE_ASSUMED.TARGET_ACTOR_GUID = CMS_ORGANIZATION.ORG_ACTOR_GUID INNER JOIN 
     CMS_MASTER_SETUP ON CMS_EMPLOYMENT.DESIGNATION_GUID = CMS_MASTER_SETUP.MASTER_SETUP_PK  
    UNION 

    SELECT CMS_ORGANIZATION.ORG_ACTOR_GUID, CMS_ORG_SHARES_HISTORY.EFFECTIVE_DATE AS EventDate, CMS_MASTER_SETUP.Description as Currency, CONVERT(varchar(50), CAST(CMS_ORG_SHARES.AUTHORIZED_CAP_AMOUNT AS money), 1), 
      'Changed to ' AS EventType, 'Share Capital (Authorized)' AS TypeOfChange, CMS_ORGANIZATION.REG_NAME 
    FROM CMS_ORGANIZATION INNER JOIN CMS_ORG_SHARES ON CMS_ORGANIZATION.ORG_ACTOR_GUID = CMS_ORG_SHARES.ORG_ACTOR_GUID INNER JOIN CMS_ORG_SHARES_HISTORY ON CMS_ORG_SHARES.ORG_SHARES_PK = CMS_ORG_SHARES_HISTORY.ORG_SHARES_GUID INNER JOIN CMS_MASTER_SETUP ON CMS_ORGANIZATION.CURRENCY_GUID = CMS_MASTER_SETUP.MASTER_SETUP_PK 
    UNION 

    SELECT CMS_ORGANIZATION.ORG_ACTOR_GUID, CMS_ORG_SHARES_HISTORY.EFFECTIVE_DATE AS EventDate, CONVERT(varchar(50), CAST(CMS_ORG_SHARES.PAID_UP_CAP_AMOUNT AS money), 1), 
      'Changed to' AS EventType, 'Share Capital (Paid Up)' AS TypeOfChange, CMS_ORGANIZATION.REG_NAME 
    FROM CMS_ORGANIZATION INNER JOIN CMS_ORG_SHARES ON CMS_ORGANIZATION.ORG_ACTOR_GUID = CMS_ORG_SHARES.ORG_ACTOR_GUID INNER JOIN 
      CMS_ORG_SHARES_HISTORY ON CMS_ORG_SHARES.ORG_SHARES_PK = CMS_ORG_SHARES_HISTORY.ORG_SHARES_GUID 

我已经得到了这个错误:
“的所有查询使用UNION合并,交叉或EXCEPT运营商必须在其目标列表中的表达式的数目相等。”在第一行。请问如何查询“CMS_MASTER_SETUP.Description作为货币,CONVERT(varchar(50),CAST(CMS_ORG_SHARES.AUTHORIZED_CAP_AMOUNT AS货币),1)”在名称列下,但都作为货币SQL服务器 - 联盟

回答

0

因为您必须拥有在每个联合组中相同数量的列,可以在第一组和第三组中包含一个空白占位符:例如, 选择 .. '' 作为货币, ..

如果实现目标。这会给你每组7列。

+0

它现在也发生在我身上,你可以做一个简单的+字符。 CMS_MASTER_SETUP.Description +','+ CONVERT(varchar(50),CAST(CMS_ORG_SHARES.AUTHORIZED_CAP_AMOUNT AS货币),1)货币 – luxdvie

+0

不可能包含空白占位符,因为第一个查询的数据与第二个查询的数据不同一。例如,第一个查询没有货币值(NULL)。我可能需要运行另一个查询,例如,如果未插入第二个查询中的货币,我会设置货币,之后会自动转换为“USD”。但如果我这样做,第一个和第三个查询将有货币“美元”,如果你知道我的意思是 –

0

错误清楚地表明“操作员必须在其目标列表中具有相同数量的表达式”。这意味着您应该在所有3个查询中的SELECT子句中拥有相同的一组字段。

示例:您在第一个查询中选择“CMS_INDIVIDUAL.FULL_NAME作为名称”,但在其他两个查询中没有名称字段。你将无法像这样做联合。

+0

不可能包含空白占位符,因为第一个查询中的数据与第二个查询中的数据不同。例如,第一个查询没有货币值(NULL)。我可能需要运行另一个查询,例如,如果未插入第二个查询中的货币,我会设置货币,之后会自动转换为“USD”。但如果我这样做,第一个和第三个查询将有货币“美元”,如果你知道我的意思 –

+0

我不知道你是否了解UNION的工作原理。除非您有相同的字段集合,否则UNION不能使用。我仍然不确定为什么你要在第一个查询中选择名称字段而不是其他2.至少你可以在其他两个查询中'NULL as Name'。对于在查询中不匹配的其他字段,您可以做类似的事情 –