2016-09-11 2 views
0

Ich habe einen Fehler mit diesen Abfragen, die sagen:GROUP BY nicht auf Ticket funktioniert

Msg 8120, Ebene 16, Status 1, Zeile 3
Spalte 'CrmDesk.Ticket.Id' ist ungültig in der Auswahlliste, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.

Dies ist meine Frage:

Select * 
from CrmDesk.Ticket 
where TicketCode in (select DISTINCT(TicketCode) 
        from CrmDesk.Ticket 
        where ReciverUserId ='3A4AA2F4-75C8-4725-8F16-81F34158258B') 
group by TicketCode 

Diese Abfrage den gleichen Fehler hat

select * 
from CrmDesk.Ticket 
group by TicketCode 

Was ist das Problem und wie kann ich es beheben?

+4

Lesen Sie, wie 'Gruppe By' arbeitet. Oder alteast sagt, was Sie versuchen zu erreichen –

+0

Nur Spalten, die in der Gruppierung nach Klausel sind, können auch in der Select-Klausel ohne eine Aggregatfunktion sein. Wenn Sie denselben Ticketcode für mehrere ID-Werte haben, welchen ID-Wert möchten Sie zurückgeben? –

+0

Es ist nicht wichtig, welche ID-Werte von Ticket-Code alle Datensätze mit dem gleichen Ticketcode haben gleiche Betreff und Kommentar-Feld In der Tat brauche ich Betreff, Kommentar und Ticket-Code –

Antwort

0

Sie sollten die Spalten in die group by-Klausel aufnehmen, die in der Auswahlliste enthalten ist.

Wenn Sie das gleiche Ticket mit dem gleichen Thema und kommentieren, benutzen Sie das folgende Skript ..

Select * 
    From crmdesk.ticket t 
    Join (select t1.ticketcode,t1.subject,t1.comment 
       From crmdesk.ticket t1 
       Group by t1.ticketcode,t1.subject,t1.comment 
       Having count(t1.id) >1) t1-- assuming you have an ID column, if not replace with ticketcode or any other relevant column 
      On t.ticketcode=t1.ticketcode 
        And t.subject=t1.subject 
        And t.comment=t1.comment 
0

Warum brauchen Sie auch eine Sub-Abfrage und GROUP BY Klausel in dieser select-Anweisung überprüfen wollte ?? nur Select-Anweisung
Für Sie die folgende Abfrage verwenden:

select * 
from CrmDesk.Ticket 
where TicketCode 
where ReciverUserId ='3A4AA2F4-75C8-4725-8F16-81F34158258B' 
0

Sie müssen bestimmen, warum Sie durch ticketcode Gruppierung müssen?

Wenn Sie nur verschiedene Ticket-Codes Werte erhalten:

Select TicketCode 
from CrmDesk.Ticket 
where ReciverUserId ='3A4AA2F4-75C8-4725-8F16-81F34158258B' 
group by TicketCode 

Wenn Sie etwas zählen möchten:

Select TicketCode, COUNT(ID) 
from CrmDesk.Ticket 
where ReciverUserId ='3A4AA2F4-75C8-4725-8F16-81F34158258B' 
group by TicketCode 

Wenn Sie nur unterschiedliche Werte wollen (ohne Duplikate):

Select distinct Subject, Comment, TicketCode 
from CrmDesk.Ticket 
where ReciverUserId ='3A4AA2F4-75C8-4725-8F16-81F34158258B' 

Oder:

Select Subject, Comment, TicketCode 
from CrmDesk.Ticket 
where ReciverUserId ='3A4AA2F4-75C8-4725-8F16-81F34158258B' 
group by Subject, Comment, TicketCode 
+0

Ich möchte Datensätze nur nach "TicketCode" gruppieren. In der Tat möchte ich einen Datensatz (es ist nicht wichtig, was Rekord) wo ReciverUserId = '3A4AA2F4-75C8-4725-8F16-81F34158258B' –

+0

Bitte zeigen Sie, was Sie jetzt haben, und was Sie erhalten möchten. Datenproben.Gruppieren nach führt die Gruppierung für die Spalte aus, die Sie bestimmen, andere Spalten müssen jedoch Aggregatfunktionen wie max, min, avg enthalten. – gofr1

+0

Vielleicht möchten Sie Top 1 für jedes Ticket? – gofr1

0

Wenn Sie group by in Ihrer Abfrage verwenden, müssen Sie eine der aggreagte Funktionen wie: sum, min, max, count, ...