2016-12-29 84 views
0

所以这就是我所在的位置(并且完全按照需要进行工作)。然而,这只是项目的第一步。因此,我们的目标是让这个查询的结果通过ODBC显示在表单1上(从未这样做,因此需要做大量的研究)。一旦显示在excel用户将能够输入日期范围...让我们说A1或B1(尚不确定在设计上)。所以这是我迄今为止所擅长的。所以现在我正在寻找更多信息的第二张表单,然后失败/成功。这第二张纸将完成第一张纸只显示更多细节。这将只适用于失败。加入两个数量查询

SELECT Sum(case when status = 6 then 1 else 0 end) as Failed, 
     Sum(case when status = 9 then 1 else 0 end) as Successful, 
    UniqueID 
Into #tempsheet1 
FROM Documents 
WHERE ownerID = 467 
and status in (6,9) 
and CreationTime between @StartDate and @EndDate 
Group By UniqueID 

Select D.UniqueID, FromName, ToName, CreationTime, 
cast(CreationTime as date) as CreationDate, cast(CreationTime as date) as CreationTime, 
ErrorCode, ElapsedSendTime, RemoteID 
From #tempsheet1 ts1 
Inner Join Documents D On 
D.UniqueID = ts1.UniqueID 
and [Status] = 9 

回答

1

你可以使用条件的聚集和总结VS个性化......

SELECT Sum(case when status = 6 then 1 else 0 end) as Failed, 
     Sum(case when status = 9 then 1 else 0 end) as Successful, 
     cast(CreationTime as date) CreationDate 
FROM Documents 
WHERE ownerID = 467 
    and status in (6,9) 
    and CreationDate between @StartDate and @EndDate 
GROUP BY cast(CreationTime as date) CreationDate 
ORDER BY cast(CreationTime as date) descending 

由于两个查询使用的文件表和相同的OWNERID过滤器,我们就可以筛选owerID的where子句。我在这个地方添加了6,9的状态,因为我们可以拥有很多我们不关心的状态,为什么还要评估它们呢?

总和(case评估状态,当6设置计数器为1时,否则它将计数器设置为0)这样,所有1和0的总和将导致失败或成功的“计数”。

+0

谢谢先生。不知道为什么这个工程虽然。 –

+0

其实这是产生不正确的结果。虽然设置是正确的。当我运行包含临时表的原始代码时,我得到的数字略有不同。 –

+0

总数与数量有差异。计数是正确的。 –

1
SELECT A.Failed,B.Successful --before it is '*' which means 'all columns' 
FROM 
(
SELECT COUNT([Status]) as Failed, 1 as JoiningValue 
    FROM Documents 
    Where ownerid = '467' 
    and [Status] = '6') as A 

INNER JOIN 

(
SELECT COUNT([Status]) as Successful, 1 as JoiningValue 
    FROM Documents 
    Where ownerid = '467' 
    and [Status] = '9') as B 

ON B.JoiningValue = A.JoiningValue 
+0

这几乎是我想要的。我最终将设置一个ODBC来优化,所以我需要从select语句中删除JoiningValue列(我知道它需要加入),但是我无法在显示中使用它。 –

+0

查看我的更新回答:) – LONG

+0

这也适用。 –

0

就可以SELECT这两个查询,那么你可以得到一个表中的值。

SELECT 
(SELECT COUNT([Status]) as Failed 
into #tempfailed 
FROM Documents 
Where ownerid = '467' 
and [Status] = '6') sa FAILED, 
(SELECT COUNT([Status]) as Successful 
FROM Documents 
Where ownerid = '467' 
and [Status] = '9') as Sucess