2016-06-08 7 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 

Ich habe diesen Fehler bekommen:
„Alle Anfragen mit einer UNION kombiniert, INTERSECT oder EXCEPT-Operator eine gleiche Anzahl von Ausdrücken in ihren Ziellisten haben muss.“ in der ersten Zeile. Darf ich fragen, wie isit möglich abfragen "CMS_MASTER_SETUP.Description als Währung, convert (varchar (50), CAST (CMS_ORG_SHARES.AUTHORIZED_CAP_AMOUNT AS Geld), 1)" unter der Spalte Name, sondern als Währung sowohlSQL Server - Union

Antwort

0

Da müssen Sie haben die gleiche Anzahl von Spalten in jeder Union-Gruppe, könnten Sie einen leeren Platzhalter in der ersten und dritten Gruppe enthalten: z SELECT .. '' als Währung, ..

wenn das Ziel erreicht. Das würde Ihnen 7 Spalten in jeder Gruppe geben.

+0

Es kommt mir jetzt auch vor, dass Sie einen einfachen + Zeichen machen könnten. CMS_MASTER_SETUP.Description + ',' + CONVERT (varchar (50), CAST (CMS_ORG_SHARES.AUTHORIZED_CAP_AMOUNT AS Geld), 1) als Währung – luxdvie

+0

, die nicht möglich wäre, leere Platzhalter als die Daten aus der ersten Abfrage enthalten unterscheidet sich von der zweiten ein. Zum Beispiel hat die erste Abfrage keinen Währungswert (NULL). Ich muss vielleicht eine weitere Abfrage ausführen, die es mir ermöglicht, die Währung beispielsweise festzulegen, wenn die Währung in der zweiten Abfrage nicht eingefügt wird, automatisch später auf "USD". Aber wenn ich das tue, haben die erste und dritte Abfrage die Währung "USD", wenn Sie wissen, was ich meine –

0

Der Fehler besagt eindeutig, dass "Operator muss eine gleiche Anzahl von Ausdrücken in ihren Ziellisten haben". Dies bedeutet, dass Sie in der SELECT-Klausel für alle drei Abfragen denselben Satz von Feldern haben sollten.

Beispiel: Sie wählen "CMS_INDIVIDUAL.FULL_NAME als Name" in der ersten Abfrage, aber Sie haben kein Feld Name in den anderen zwei Abfragen. Sie werden UNION nicht so machen können.

+0

, die nicht möglich wäre, leere Platzhalter einzubeziehen, da sich die Daten von der ersten Abfrage von der zweiten unterscheiden. Zum Beispiel hat die erste Abfrage keinen Währungswert (NULL). Ich muss vielleicht eine weitere Abfrage ausführen, die es mir ermöglicht, die Währung beispielsweise festzulegen, wenn die Währung in der zweiten Abfrage nicht eingefügt wird, automatisch später auf "USD". Aber wenn ich das tue, wird die erste und dritte Frage die Währung "USD" haben, wenn Sie wissen, was ich meine –

+0

Ich bin nicht sicher, wenn Sie verstehen, wie UNION funktioniert. Wenn Sie nicht dieselbe Gruppe von Feldern abgerufen haben, kann UNION nicht verwendet werden. Ich bin immer noch nicht sicher, warum Sie Name-Feld in der ersten Abfrage und nicht in anderen auswählen 2. Zumindest können Sie "NULL als Name" in den anderen 2 Abfragen. Sie können eine ähnliche Aktion für andere Felder ausführen, die nicht über die Abfragen hinweg übereinstimmen –