2013-06-11 38 views
-2

我已经产生输出就像一个存储过程:SQL Server过程需要修改

Success Fail Progress 
---------------------------- 
    1  2  3 

但我想输出是:

Recieved Count 
---------------- 
success  1 
---------------- 
fail  2 
---------------- 
progress 3 

请有人可以帮助我从得到这个输出我的sql服务器。

当前的SQL:

select 
    sum(case when status='AK' then 1 else 0 end) as 'SUCCESS', 
    sum(case when status='E' then 1 else 0 end) as 'FAILURE', 
    sum(case when status NOT IN('AK','E')then 1 else 0 end) as 'PENDING' 
from t 
where [rec_datetime] BETWEEN '2008-02-11' AND DATEADD(DAY,1,'2008-02-11') 
+2

你可以发表你的SELECT语句的代码,因为它是现在? – JamieA

+0

sum(status ='AK'then 1 else 0 end时的情况)为'SUCCESS', sum(status ='E'then 1 else 0 end时的情况)为'FAILURE', sum IN('AK','E')then 1 else 0 end)as'PENDING' from t where [rec_datetime] BETWEEN'2008-02-11'and DATEADD(DAY,1,'2008-02-11' ) – user1268906

+0

当然。更改您的存储过程输出。 – Kermit

回答

0

替换为你的SELECT语句

select 'Success' as Received, sum(case when status='AK' then 1 else 0 end) as [count] 
from t where [rec_datetime] BETWEEN '2008-02-11' AND DATEADD(DAY,1,'2008-02-11') 
union all 
select 'Fail', sum(case when status='E' then 1 else 0 end) 
from t where [rec_datetime] BETWEEN '2008-02-11' AND DATEADD(DAY,1,'2008-02-11') 
union all 
select 'Progress' , sum(case when status NOT IN('AK','E')then 1 else 0 end) 
from t where [rec_datetime] BETWEEN '2008-02-11' AND DATEADD(DAY,1,'2008-02-11') 
+0

Thanku Jamie..it works .... :) – user1268906

+0

1个小问题Jamie ...正在使用'Between'之间的正确方法提取日期..我的主要动机是从日历中选择一个日期选择记录和找到匹配的数据..否则它给我零记录,因为它在那里与时间戳 – user1268906

+0

之间是包容性的,所以如果您的数据包含rec_datetime是12-02-2008 00:00:00的记录,它们将包含在您的结果。对于你的例子,如果你只想要11/02/2008的数据,那么使用[rec_datetime]> ='2008-02-11'和[rec_datetime] <'2008-02-12' – JamieA

-1

强硬没有看到您的代码或数据,但这样的事情可能工作:

select 'success' As Recieved, Success As [Count] from mytable 
union all 
select 'fail', Fail from mytable 
union all 
select 'progress', Progress from mytable 
+0

不错,但一个简单的问题:为什么你把一个[Count]不算数? – LifeScript

+0

这不是'from mytable' ..这是'fromStoredProc'' – Kermit

+0

和你认为存储过程是从哪里查询的?一张桌子可能? –

1

您可以使用UNPIVOT将列移动到行中:

SELECT b.[Received], b.[Count] 
FROM (SELECT[Success] = 1, [Fail] = 2, [Progress] = 3) a 
UNPIVOT ([Count] FOR [Received] IN ([Success], [Fail], [Progress])) b 

输出

Received Count 
----------- ----------- 
Success  1 
Fail  2 
Progress 3