2016-10-19 1 views
0

Ich habe 3 Tabellen, sie sind Events, SignOffs und Users.Wie bekomme ich SQL, um Spalten an die Ergebnismenge anzuhängen, anstatt weitere Zeilen hinzuzufügen?

Events hat die Felder EventId (PK, int, autoincrement) und EventTitle (nvarchar (50)).

SignOffs hat die Felder SignOffId (PK, int, Autoinkrement), EventId (FK bis Events.EventId) und SignedOffByUserId (FK bis Users.UserId).

Users hat die Felder UserId (PK, int, autoincrement) und UserName (nvarchar (50)).

mag ich so etwas wie dies zu tun:

SELECT [Events].EventId, EventTitle, UserName 
FROM [Events] 
    INNER JOIN [SignOffs] ON [Events].EventId = [SignOffs].EventId 
    INNER JOIN [Users] ON [SignOffs].SignedOffByUserId = [Users].UserId 

Das Problem mit der oben ist, dass Sie eine Zeile für jede Person erhalten, die abgezeichnet, so dass ein bestimmtes Ereignis kann mehrfach in der Liste wiederholt werden, wenn mehrere Leute haben sich abgemeldet.

Ich möchte Spalten für jede Person hinzufügen, die sich für ein Ereignis abgemeldet hat. So ist die Ergebnismenge sollte für eine Veranstaltung wie folgt aussehen, wo 3 Personen abgezeichnet:

EventId - EventTitle-SignedOffByUser1 - SignedOffByUser2 - SignedOffByUser3

Ich habe keine Ideen, wie dies getan werden kann, und ich Ich bin mir nicht einmal sicher, wie ich das Problem prägnant formulieren kann, um nach Antworten zu suchen.

+2

Google: "SQL Server Pivot". –

Antwort

0

Sie müssen die Daten drehen, dies kann entweder mit dem PIVOT-Operator erfolgen. https://msdn.microsoft.com/en-us/library/ms177410.aspx?f=255&MSPPError=-2147217396

oder Sie können mehrere Case-Anweisungen verwenden, um den gleichen Effekt zu erzielen.

Die Einschränkungen beider Ansätze bestehen darin, dass Sie möglicherweise nur eine vordefinierte Anzahl von Spalten haben. Wenn Sie zum Beispiel mehr als 3 Abmeldungen haben, werden Sie diese nicht sehen.

Eine andere Möglichkeit wäre, sie in eine CSV-Liste zu setzen, damit Sie alle in einer Zeile sehen können, egal wie viele es sind.

http://blog.sqlauthority.com/2009/11/25/sql-server-comma-separated-values-csv-from-table-column/

SELECT SUBSTRING(
(SELECT ',' + s.Name 
FROM HumanResources.Shift s 
ORDER BY s.Name 
FOR XML PATH('')),2,200000) AS CSV 

kann dies in einer Sub-Abfrage durchgeführt werden.

Hoffe, das hilft.

Verwandte Themen