2016-08-08 37 views
0

Ich muss zwei Variablen implementieren, um das Datenergebnis in einer Abfrage zu speichern.Wie in einer Variablen den Wert der folgenden Abfrage speichern? SQL Server

Ich habe er Abfrage folgende:

SELECT * FROM 
(SELECT location AS Location, COUNT(*) AS Trucks FROM Truck GROUP BY location) loc 
OUTER APPLY 
(
    SELECT 
     COUNT(*) AS TotalOfCampaings, 
     SUM(CASE WHEN cc.campaing_status = 'Complete' THEN 1 ELSE 0 END) AS CampaingsWithCompleteStatus, 
     SUM(CASE WHEN cc.campaing_status = 'InProcess' THEN 1 ELSE 0 END) AS CampaingsWithInProcessStatus 
    FROM CampaingControl cc INNER JOIN Truck t ON cc.vin = t.vin 
    WHERE t.location = loc.location 
) stat 

Diese Abfrage zeigt die folgende Tabelle:

| Ort | LKW | TotalOfCampaings | CampaingsWithCompleteStatus | CampaingsWithInProcessStatus

Ich brauche eine Spalte in der hinzufügen Ende, in der neuen Spalte muss ich den Prozentsatz der Kampagnen mit dem vollständigen Status erhalten, ich habe versucht, etwas wie folgt zu tun:

Prozent = (CampaingsWithCompleteStatus/TotalOfCamapings) * 100

Aber ich weiß nicht, wie man die Werte der Abfrage speichert, um das zu tun.

Antwort

0

Etwas wie folgt aus:

SELECT 
    loc.Location, 
    loc.Trunks, 
    stat.TotalOfCampaings, 
    stat.CampaingsWithCompleteStatus, 
    stat.CampaingsWithInProcessStatus, 
    (1.0 * stat.CampaingsWithCompleteStatus /stat.TotalOfCampaings) * 100 as [Percent] 
FROM 
(SELECT location AS Location, COUNT(*) AS Trucks FROM Truck GROUP BY location) loc 
OUTER APPLY 
(
    SELECT 
     COUNT(*) AS TotalOfCampaings, 
     SUM(CASE WHEN cc.campaing_status = 'Complete' THEN 1 ELSE 0 END) AS CampaingsWithCompleteStatus, 
     SUM(CASE WHEN cc.campaing_status = 'InProcess' THEN 1 ELSE 0 END) AS CampaingsWithInProcessStatus 
    FROM CampaingControl cc INNER JOIN Truck t ON cc.vin = t.vin 
    WHERE t.location = loc.location 
) stat 
+0

Hallo, ich schätze Ihre Hilfe, aber wenn ich Werte in den Tabellen einfügen die prozentuale Spalte zeigt immer 0. – TimeToCode

+0

Ich nehme an die beiden Werte sind ganze Zahlen, weil ich die Funktion SUMME, oder vielleicht muss ich in float umwandeln? Ich weiß nicht – TimeToCode

+1

Bearbeitet: da sie int sind, ist das Ergebnis int auch. Um es zu lösen, verwenden Sie Trick, indem Sie mit 1.0 multiplizieren –