2017-09-04 4 views
0

Ich habe eine Ticket-Detail-Tabelle mit n Anzahl der Spalten.Jedes Projekt hat eine spezifische Konfiguration, um eine bestimmte Anzahl von Spalten zu wählen, um die Wiederholung Anzahl der gleichen Wert ticket.Zu finden, habe ich eine Tabelle mit festen Spaltennamen mit gespeicherten Werten und Häufigkeit für alle Projekte.SQL-Tabellenentwurf für ein dynamisches Szenario

Tabelle 1: Ticket-Details

TicketID | Column1 | Column2 | Column3 | Column4 |ProjectN  
T1  | Priority1| Low  | M1  | S1  |XYZ 
T2  | Priority1| Low  | M1  | S1  |XYZ 
T3  | Priority1| High | M1  | S1  |XYZ 
T4  | Priority1| Low  | M1  | S1  |ABC 
T5  | Priority1| Low  | M1  | S1  |ABC 

Tabelle 2 mit Fest Spalten:

ID | Column1 | Column2 | Column3 | Column4 |ProjectN | Frequency 
1 | Priority1| Low  | M1  | S1  |XYZ  |2 
2 | Priority1| High | M1  | S1  |XYZ  |1 
3 | Priority1| Low  | M1  | S1  |ABC  |2 

Nun, ich brauche die gleiche Wert Speicherlogik mit Zählung mit unterschiedlichen Spalten für jedes Projekt zu erreichen Für zB: Wenn Projekt 1 Spalte1, Spalte2, Spalte3 wählt, dann sollte die Ergebnistabelle diese 3 Spaltenwerte und die Anzahl der Tickets haben

Ähnlich ist die ne xt-Projekt kann column1, column3 wählen und wenn ja, dann sollten für dieses Projekt Werte für diese 2 und count verfolgt werden. Diese Logik muss dynamisch in einer einzelnen SQL Server-Tabelle erstellt werden, die die Werte ausgewählter Spalten und die wiederholte Zählung aus der Ticketdetaildatei enthält. Bitte helfen Sie mit dem Erstellen der Logik mit SQL-Tabelle.

+0

Was ist Ihr Problem genau? Hast du dynamic sql ausprobiert? – Serg

Antwort

0

Ihre Strukturen ändern

Tabelle 1: TicketTypes

TicketTypeID | Column1 | Column2 | Column3 | Column4 
1   | Priority1| Low  | M1  | S1 
2   | Priority1| High | M1  | S1 

Tabelle 2: Tickets

TicketID | TicketTypeID |ProjectN  
T1  | 1   |XYZ 
T2  | 1   |XYZ 
T3  | 2   |XYZ 
T4  | 1   |ABC 
T5  | 1   |ABC 

Dann würden Sie TicketTypes mit der einzigartigen Kombination von Spalten füllen, die durch Verwendung von Projekte (überprüfen Sie, bevor Sie versuchen, in die Ticket-Tabelle einzufügen). Sie müssen sich auch für einen Wert entscheiden, der besagt, dass die Spalte nicht anwendbar ist, oder auf NULL setzen.

Dann verbinden Sie sich in dieser Ticket-Typ-Tabelle mit Ihren Ticket-Details, um zu identifizieren, welcher Typ gehört. (Wenn Sie für Ihre Spalten NULL-Werte festlegen, müssen Sie in Ihrem Join auch ISNULL() eingeben, um diese Werte ebenfalls zu verknüpfen.)

Dann zum Beispiel können Sie diese Tabelle in Ihrem Ticket-Typen haben:

TicketTypeID | Column1 | Column2 | Column3 | Column4 
1   | Priority1| Low  | M1  | S1 
2   | Priority1| High | M1  | S1 
3   | Priority1| NULL | M1  | NULL 
4   | NULL  | High | NULL | S1 
5   | NULL  | NULL | NULL | NULL 

Jetzt brauchen Sie die Tabelle tatsächlich zu existieren für Sie die Frequenz zu sehen? Oder dient das nur der Berichterstattung? Wie oft aktualisieren Sie sonst die Tabelle? Sie können mit einer Ansicht oder gespeicherte Prozedur wie dies besser sein:

SELECT 
    tType.Column1 
    , tType.Column2 
    , tType.Column3 
    , tType.Column4 
    , tickets.ProjectN 
    , COUNT(1) AS Frequency 
FROM TicketTypes AS tTypes 
JOIN Tickets 
    ON tickets.TicketTypeID = tTypes.TicketTypeID 
GROUP BY tType.Column1, tType.Column2, tType.Column3, tType.Column4, tickets.ProjectN 
+0

Ja, die Tabelle sollte eine Häufigkeitsspalte haben, um die Anzahl der sich wiederholenden Tickets zu kennen. – DhivyaBharathi

+0

Yeah das Problem damit ist die Anzahl der sich wiederholenden Tickets wird sich ändern, so müssen Sie die Tabelle aktualisieren, um dies zu reflektieren. Es kann sein, dass Sie eine Ansicht oder gespeicherte Prozedur erstellen, um Ihre finale Tabelle so zu erstellen, dass sie immer aktuelle Informationen liefert, wenn Sie sie abfragen – PreQL

0

Eine dynamische SQL Art und Weise, ist dies:

declare @sql nvarchar(max); 
set @sql = N'select '+ @columns + N', ProjectN, count(*) Frequency from [Table 1] group by '+ @columns + N', ProjectN'; 
exec sp_sqlexec @sql; 

Die @columns ist eine Eingabezeichenfolge wie N'column1, column2, column3', können Sie diese verwenden, in einem gespeicherten Verfahren.

Verwandte Themen