2016-12-09 2 views
0

У меня возникли проблемы при возврате хранимой процедуры, мне нужно все выбрать, чтобы создать диаграмму.Сохраненная процедура SQL Server возвращает только одно значение

Это моя процедура:

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 

И это при выполнении:

USE [Quotes] 
GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[LastWeekQuotesByAssociate] 

SELECT 'Return Value' = @return_value 
GO 

Это возвращает только первый выбор!

Любой намек, кто-то может помочь мне здесь!

Благодаря

ответ

0

Если вы делаете это таким образом, вам нужно добавить

UNION ALL 

между каждым выбором.

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 

лучшим решением будет генерировать список/таблица, содержащая networkIds, а затем использовать «в», как:

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

Возможно, могли бы использовать подзапрос вместо перечисления каждого 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

Вместо того чтобы использовать, где ... = ... или ... = было бы лучше использовать оператор 'IN()'. – SMM

+0

Вы правы, обновлены. –

0

Пожалуйста, используйте UNION ALL команда после того, как каждый запрос выбора завершился, как пример SELECT networkid, COUNT (isQuoteComplete) как итого ОТ emailГДЕ (NETWORKID = 'crbark00' И emailDateEntry> (DATEADD (неделя, -1, GETDATE()))) GROUP BY NETWORKID UNION ALL ВЫБОР NETWORKID, COUNT (isQuoteComplete), как Total ОТ электронной почты гДЕ (NETWORKID = 'crherb00' и emailDateEntry> (DATEADD (неделя, -1, GETDATE()))) GROUP BY NETWORKID

Смежные вопросы