2017-10-20 4 views
-3

ich meine Abfrage wie unten bearbeitet haben:Benötigen Sie bei der Erzeugung helfen Werte

SELECT 
    ser.SERVER_COMPONENT_NAME, ITServ.IT_SERVICE_BUSINESS_CRITICALIT, 
    app.APPCROWNJEWEL, 
    MAX(CASE 
      WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT = 'Tier o' THEN 1 
      WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT = 'Tier 1' THEN 3 
      WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT = 'Tier 2' THEN 5 
      WHEN ITServ.IT_SERVICE_BUSINESS_CRITICALIT IS NULL THEN 5 
      ELSE 0 
     END) AS TierRatingValue, 
    MAX(CASE 
      WHEN app.APPCROWNJEWEL = 'Yes' THEN 3 
      WHEN app.APPCROWNJEWEL = 'No' THEN 2 
      ELSE 1 
     END) AS JewelsValue 
FROM 
    TDM_FACT_SERVER ser 
LEFT JOIN 
    TDM_RKT_SM_TO_SERVER smServer ON smServer.SERVER_COMPONENT_ID = Ser.SERVER_COMPONENT_ID 
            AND smServer.SOFTWARE_MODULE_COMPONENT_ID IN (SELECT DISTINCT sm.SOFTWARE_MODULE_COMPONENT_ID 
                       FROM software_module sm 
                       WHERE sm.SOFTWARE_MODULE_COMPONENT_NAME LIKE 'DBSM:%' OR 
                         sm.SOFTWARE_MODULE_COMPONENT_NAME LIKE 'MWSM:%' OR 
                         sm.SOFTWARE_MODULE_COMPONENT_NAME like 'CMS:%') 
LEFT JOIN 
    SOFTWARE_MODULE sm ON sm.SOFTWARE_MODULE_COMPONENT_ID = smServer.SOFTWARE_MODULE_COMPONENT_ID 
LEFT JOIN 
    TDM_RKT_IT_SERVICE_TO_SM ITSERVICETOSM ON sm.SOFTWARE_MODULE_COMPONENT_ID = ITSERVICETOSM.SOFTWARE_MODULE_COMPONENT_ID 
              AND ITSERVICETOSM.IT_SERVICE_COMPONENT_ID IN (SELECT DISTINCT Itserv.IT_SERVICE_COMPONENT_ID 
                         FROM tdm_fact_it_srvc Itserv 
                         WHERE Itserv.IT_SERVICE_SERVICE_RECONCILIAT IN ('Active in PLADA but not present in GSD', 
                                     'Active in GSD but not present in PLADA', 
                                     'Active in GSD and PLADA', 
                                     'Active in GSD but demised in PLADA', 
                                     'Active in PLADA but demised in GSD'))  
LEFT JOIN 
    TDM_FACT_IT_SRVC ITServ ON ITSERVICETOSM.IT_SERVICE_COMPONENT_ID = ITServ.IT_SERVICE_COMPONENT_ID 
LEFT JOIN 
    TDM_RKT_APP_TO_ITSERVICE ApptoITService ON ITServ.IT_SERVICE_COMPONENT_ID = ApptoITService.IT_SERVICE_COMPONENT_ID 
LEFT JOIN 
    hsbc_ci_inventory_as app ON ApptoITService.APPLICATION_COMPONENT_ID = app.appid 
WHERE 
    ser.SERVER_COMPONENT_NAME = 'GBL03427' 
GROUP BY 
    ser.SERVER_COMPONENT_NAME, ITServ.IT_SERVICE_BUSINESS_CRITICALIT, 
    app.APPCROWNJEWEL 

Unterhalb der Ausgang ist, wie es wie erwartet zwei neue Spalten erzeugt.

Server   TierRating Jewels   TierRatingValue  JewelsValue 
---------  ---------- ----------  ----------------  ----------- 
GBL03427   Tier 0  No     0     2 
GBL03427   Tier 1  Yes    3     3 
GBL03427   Tier 2  Undefined   5     1 
GBL03427   Tier 1  No     3     2 
GBL03427   Tier 2  No     5     2 
GBL03427   Tier 0  Yes    0     3 
GBL03427   Tier 1  NULL    3     1 
GBL03427   NULL  NULL    5     1 
GBL03427   Tier 1  Undefined   3     1 
GBL03427   Tier 0  Undefined   0     1 

Aber ich mag die Ausgabe als eine Zeile mit dem Maximalwert von TierRatingValue und JewelsValue wie unten sehen.

Server  TierRating Jewels   TierRatingValue  JewelsValue 
--------- ---------- ----------  ----------------  ----------- 
GBL03427 Tier 2  Yes    5     3 
+2

Bitte markieren Sie die richtige Datenbank, die Sie verwenden .. MySQL, SQL-Server und SQLite sind nicht die gleichen .. –

+0

Es würde auch helfen, wenn Sie Beispieldaten bereitstellen würden (z. B. als in Anweisungen einfügen oder durch eine with-Klausel). Haben Sie einen "Group By" -Clause probiert? Z.B. Wählen Sie ... Nach Tierbewertung gruppieren. – Benjamin

+0

Willkommen bei StackOverflow: Wenn Sie Code, XML oder Datenbeispiele postulieren ***, *** *** markieren Sie diese Zeilen im Texteditor und klicken Sie auf den "Code Samples" Button ('{}') auf der Editor-Werkzeugleiste Format und Syntax unterstreichen es! –

Antwort

0

Um einen Wert wie 5 zu ersetzen, wenn einige vorhandene Wert = ‚Tier 0‘ Sie case expression verwenden würde, die wie folgt aussehen könnte:

case 
    when TierRating = 'Tier 0' then 1 
    when TierRating = 'Tier 1' then 3 
    when TierRating = 'Tier 2' then 5 
    when TierRating IS NULL then 5 
    when TierRating = 'Yes' then 3 
    when TierRating = 'No' then 2 
    else 1 
end AS Tier_Rank 

Unter der Annahme der Fall Ausdruck ganzen Zahlen nicht verwendet 1 , 2, usw. dann auf einen Maximalwert erreichen Sie den ganzen Fall Ausdruck in einer mAX() Funktion wie folgt platzieren:

MAX(
    case 
     when TierRating = 'Tier o' then 1 
     when TierRating = 'Tier 1' then 3 
     when TierRating = 'Tier 2' then 5 
     when TierRating IS NULL then 5 
     when TierRating = 'Yes' then 3 
     when TierRating = 'No' then 2 
     else 1 
    end 
    ) AS Tier_Rank 

und integrieren sie wie jede andere Spalte einer Abfrage u singen Sie eine GROUP BY-Klausel.

+0

Danke dafür, ich habe Änderungen an der Abfrage vorgenommen und die ursprüngliche Frage bearbeitet. Könnten Sie mir bitte bei der bearbeiteten Frage helfen? – Vikas

+0

Ist Ihre Frage jetzt gelöst? Hast du noch Fragen zu dieser Antwort? Um eine Antwort zu akzeptieren "[** Klicken Sie auf das Häkchen **] (https://ibb.co/ikqyO6)" Weitere Informationen finden Sie unter [help/accepting] (https://stackoverflow.com/help/someone-answers) –

Verwandte Themen