2016-12-09 7 views
0

Ich habe einige Probleme beim Zurückgeben einer gespeicherten Prozedur, ich brauche alle Auswahl, um ein Diagramm zu erstellen.Gespeicherte SQL Server-Prozedur, die nur einen Wert zurückgibt

Das ist mein Verfahren:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[LastWeekQuotesByAssociate] 
AS 
BEGIN 
    SELECT 
     networkid, COUNT(isQuoteComplete) as Total 
    FROM 
     email 
    WHERE 
     (networkID = 'crbark00' 
     AND emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) 
    GROUP BY 
     networkID 

    SELECT 
     networkid, COUNT(isQuoteComplete) as Total 
    FROM 
     email 
    WHERE 
     (networkID = 'crherb00' 
     AND emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) 
    GROUP BY 
     networkID 

    SELECT 
     networkid, 
     COUNT(isQuoteComplete) as Total 
    FROM 
     email 
    WHERE 
     (networkID = 'crcalr25' 
     AND emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) 
    GROUP BY 
     networkID 

    SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'craran00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crcerg25'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crdelj00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crromj00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crarrl00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crverj00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crmore00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crgomf00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crvarm00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crmong00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crarim00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crjimj00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crvilg00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
END 

Und das ist bei der Ausführung:

USE [Quotes] 
GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[LastWeekQuotesByAssociate] 

SELECT 'Return Value' = @return_value 
GO 

Es nur wählen Sie zuerst wieder da!

Irgendein Hinweis, jemand kann mir hier helfen!

Dank

Antwort

0

Wenn Sie es auf diese Weise tun, müssen Sie

UNION ALL 

zwischen jedem ausgewählten hinzuzufügen.

SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crbark00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
UNION ALL 
SELECT networkid,COUNT(isQuoteComplete) as Total from email where(networkID = 'crherb00'and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 

bessere Lösung wäre Liste/Tabelle networkIds zu erzeugen und verwenden Sie dann 'in' wie enthalten:

SELECT networkid,COUNT(isQuoteComplete) as Total 
from email 
where 
    networkID in ('crbark00', 'crbark01', 'crbark02') 
    and emailDateEntry > DATEADD(WEEK, -1, GETDATE()) 
group by networkID 

Vielleicht könnte verwenden subselect statt Auflistung jedes NetworkID

0
SELECT networkid,COUNT(isQuoteComplete) as Total from email 
     where networkID in ('crbark00','crxxxxx') 
     and emailDateEntry > (DATEADD(WEEK, -1, GETDATE()))) group by networkID 
+0

Statt mit dem ... = ... oder ... = Es wäre besser, den 'IN()' Operator zu verwenden. – SMM

+0

Sie sind korrekt, aktualisiert. –

0

Bitte benutzen Sie UNION ALL Befehl einmal, wenn jede select-Anweisung wie Beispiel abgeschlossen wurde SELECT networkid, COUNT (isQuoteComplete) als Gesamt FROM email WHERE (NetworkID = 'crbark00' UND emailDateEntry> (DATEADD (WEEK, -1, GETDATE()))) GROUP BY NetworkID UNION ALL SELECT NetworkID, COUNT (isQuoteComplete) als Gesamt VON E-Mail WHERE (NetworkID = 'crherb00' uND emailDateEntry> (DATEADD (WEEK, -1, GETDATE()))) GROUP BY NetworkID

Verwandte Themen