2014-02-26 49 views
0

查看从主查询中获取子查询值中的where语句值。SQL设置子查询其中来自主查询的值

这是一个简化版本的即时通讯尝试实现,但它会给你的想法。

SELECT Date, Day, Year, 

(SELECT COUNT(*) AS [Moves] 
FROM 
    (
    SELECT moves AS too 
    FROM moveevent 
    FULL OUTER JOIN job AS too ON moves = too.jobid 
    WHERE (moveevent.time >= [start] and moveevent.time <= [end]) 
UNION ALL 
    SELECT moves AS frm 
    FROM moveevent 
    FULL OUTER JOIN job AS frm ON moves = frm.jobid 
    WHERE (moveevent.time >= [start] and moveevent.time <= [end]) 
    ) 
    AS m 
FULL OUTER JOIN job ON m.too = jobid 
WHERE mainjobid = jobid 
GROUP BY jobid) 
) 
     AS [Total Moves by Shift], 


FROM job 
LEFT OUTER JOIN mainjob ON jobid = mainjobid 

WHERE jobid = '12345' 
and [start] = '2013-05-25 12:45:00.000' 
and [end] = '2013-05-25 17:45:00.000' 

基本上我想在子查询中的起点和终点值主查询中定义,但我不能让他们成为有效的列名。

名称“开始”和“结束”,这些不是任何表中的字段,这些只是组成,我希望能够在底部的主要查询where子句中设置这些。

+0

为什么在'UNION ALL'中使用完全相同的查询?还是它是一个错字? – NickyvV

+0

你知道Common Table Expressions(CTE)吗?我不知道我是否正确理解这个问题,但在这种情况下它可以帮助你。 – Ziouas

+0

工会也将汇集在一起​​,这只是一个削减版本,但它需要其他部分来区分两者。 – Matt

回答

2

试一下:

DECLARE @start DATETIME, @end DATETIME 
SET @start = '2013-05-25 12:45:00.000' 
SET @end = '2013-05-25 17:45:00.000' 
     (SELECT COUNT(*) AS [Moves] 
    FROM 
     (
     SELECT moves AS too 
     FROM moveevent 
     FULL OUTER JOIN job AS too ON moves = too.jobid 
     WHERE (moveevent.time >= @start and moveevent.time <= @end) 
    UNION ALL 
     SELECT moves AS frm 
     FROM moveevent 
     FULL OUTER JOIN job AS frm ON moves = frm.jobid 
     WHERE (moveevent.time >= @start and moveevent.time <= @end) 
     ) 
     AS m 

我测试了不久,但不definitily。请给我一个反馈。

+0

你好,我的代码是它的一个减少版本,大部分代码不是问题在这里它的定义在子查询中的开始和结束,然后给他们主要查询中的值 – Matt

+1

哦,对不起,现在我不知道你想要什么。让我想一想吧 – scherard

+0

叶在子查询中我使用名称“开始”和“结束”,这些都不是任何表中的字段,这些只是组成,然后我希望能够在主要查询中设置这些底部的where子句。 – Matt