【发布时间】:2014-03-29 03:06:55
【问题描述】:
希望从主查询中获取子查询值中的 where 语句值。
这是我试图实现的目标的简化版本,但它会给你这个想法。
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'
基本上我希望子查询中的开始和结束值由主查询定义,但我不能让它们成为有效的列名。
名称“start”和“end”,它们不是任何表中的字段,它们只是组成,我希望能够在底部的主查询 where 子句中设置它们。
【问题讨论】:
-
为什么在
UNION ALL中使用完全相同的查询?还是打错字了? -
您知道公用表表达式 (CTE) 吗?我不知道我是否正确理解了这个问题,但在这种情况下它可以帮助你。
-
工会也是要合体,frm动起来,这只是一个缩减版,但需要其他部分来区分两者。
-
@Matt 但您只从子查询中返回
COUNT(*),因此以后不会有任何区别.. -
@NickyvV 忽略主代码,这里的大部分代码不是问题,它在子查询中定义开始和结束,然后在主查询中给它们值
标签: mysql sql sql-server datetime subquery