2017-07-24 3 views
1

Meine Datenbank Datensätze Probe wie untenBenutzerdefiniert Wählen Sie mit SQL

Database Records

Ich bin Ergebnisse wie unten

SELECT 
    Category, 
    SubCategory, 
    COUNT(Category) AS [CategoryCount], 
    CASE 
     WHEN Category = 'Vegetables' THEN 3.1 
     WHEN Category = 'Animals' THEN 4.1 
     WHEN Category = 'Cars' THEN 3.1 
     WHEN Category = 'Fruits' THEN 2.7 
    ELSE 0 END AS [OrderRank] 
FROM 
    Table1 
GROUP BY 
    Category 
ORDER BY 
    OrderRank DESC, 
    Category 

SQL Results

bekommen würde ich Ergebnisse wie wie unten zu bekommen, ich bedeutet, wenn gruppierte Category- und SubCatgory-Datensätze mehr als 1 Category-Datensätze enthalten, muss "Category" sein, aber gruppierte Category und SubCategory gleich 1 "SubCate blutig“Zeile muss

enter image description here

+0

Können Sie bitte Ihre Anfrage an Ihre Quellentabelle und das gewünschte Ergebnis anpassen? –

+0

@ PM77-1 Okay danke. Ich habe es repariert. – Kerberos

+0

Keine Änderungen angezeigt. Hast du deine Bearbeitung wirklich eingereicht? –

Antwort

2
SELECT 
    Category, 
    CASE 
     WHEN COUNT(DISTINCT SubCategory) > 1 THEN '' 
     ELSE MAX(SubCategory) 
    END, 
    COUNT(Category) AS [CategoryCount], 
    CASE 
     WHEN Category = 'Vegetables' THEN 5.3 
     WHEN Category = 'Animals' THEN 4.1 
     WHEN Category = 'Cars' THEN 3.1 
     WHEN Category = 'Fruits' THEN 2.7 
    ELSE 0 END AS [OrderRank] 
FROM 
    Table1 
GROUP BY 
    Category 
ORDER BY 
    OrderRank DESC, 
    Category 

Geben Sie diesen einen Schuss leer oder NULL sein.

Mithilfe einer case-Anweisung können Sie die Anzahl der Unterkategorien oder leeren Felder angeben.

EDIT: Antwortänderung nach Kerebos aktualisierte Frage.

Ausführen des Codes ich oben geschrieben haben, erzeugt die folgende Ergebnismenge:

enter image description here

ich die COUNT() Case-Anweisung aktualisiert haben für verschiedene Unterkategorien zu überprüfen. Es ist nicht die schönste Lösung, aber es funktioniert

Neben der Tatsache, dass Ihr Orderrank ist anders (das ist, weil Sie Code ausgeführt haben, die anders ist, was Sie geschrieben haben, weil sie hart codierte Werte sind) generiert der Code das erwartete Ergebnis einstellen. Wenn die Bestellung das Problem ist, ändern Sie einfach die Bestellung.

EDIT2: Ich habe gerade meinen Code aktualisiert, um die richtige Reihenfolge nach Ihrer Frage zu generieren.

+0

Es tut mir leid, meine Frage war falsch wegen mir. Deine Codes funktionieren aus diesem Grund nicht für mich. Ich habe meine Frage bearbeitet. Entschuldigung nochmal. – Kerberos

+0

@kerebos aktualisiert –

+0

Vielen Dank. Es funktioniert wie Charme. – Kerberos

0

Um das gewünschte Ergebnis zu erhalten, müssen Sie diese Zeile basierend auf der Antwort @jamesLuxton ändern.

COUNT(Category) AS [CategoryCount], 

für diesen einen

SUM(Categorycount) AS [CategoryCount], 

final SQL wird diese Hilfe dieses

SELECT 
    Category, 
    CASE 
    WHEN COUNT(Category) > 1 THEN '' 
    ELSE MAX(SubCategory) 
END, 
sum(Categorycount) AS [CategoryCount], 
CASE 
    WHEN Category = 'Vegetables' THEN 3.1 
    WHEN Category = 'Animals' THEN 4.1 
    WHEN Category = 'Cars' THEN 3.1 
    WHEN Category = 'Fruits' THEN 2.7 
ELSE 0 END AS [OrderRank] FROM 
Table1 GROUP BY 
Category 
ORDER BY 
     OrderRank DESC, 
Category 

Hoffnung.

Gut Antwort von @james

+0

Es tut mir leid, meine Frage war falsch wegen mir. Deine Codes funktionieren aus diesem Grund nicht für mich. Ich habe meine Frage bearbeitet. Entschuldigung nochmal. – Kerberos

+0

kein Problem @Kerberos danke –