【问题标题】:SQL setting a sub querys where value from the main querySQL 设置子查询 where 来自主查询的值
【发布时间】: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


【解决方案1】:

试试看:

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

我很快测试了它,但没有确定。请给我反馈。

【讨论】:

  • 你好,我的代码是它的精简版,这里的大部分代码不是问题,它在子查询中定义开始和结束,然后在主查询中给它们值
  • 哦,抱歉,现在我明白你想要什么了。让我考虑一下
  • 是的,所以在子查询中我使用名称“start”和“end”,这些不是任何表中的字段,它们只是组成,然后我希望能够在主要查询底部的where子句。
  • 使用声明和设置完美!正在考虑这个,但不能让它工作!谢谢各位!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多