缩小sql结果集的范围

缩小sql结果集的范围,sql,sql-server-2008,Sql,Sql Server 2008,我有以下sql命令: SELECT RecordedBy as 'Recorded By', COUNT(*) Total FROM mytable WHERE StartedDate BETWEEN DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP), '00:01AM') AND DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP), '11:59PM') group by RecordedBy

我有以下sql命令:

SELECT RecordedBy as 'Recorded By', COUNT(*) Total 
FROM mytable 
WHERE 
StartedDate BETWEEN DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP), '00:01AM')
AND DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP), '11:59PM')
group by RecordedBy order by Total desc
我想要完成的是通过将此sql嵌入到另一个sql中而不更改原始sql来进一步细化此查询的结果

例如,我想通过RecordedBy子句缩小原始sql的范围:我想做的是:

select * from mytable in
(
    SELECT RecordedBy as 'Recorded By', COUNT(*) Total  FROM mytable  
    WHERE  StartedDate BETWEEN 
    DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP),'00:01AM')
    AND DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP),'11:59PM') 
    group by RecordedBy order by Total desc
)
但这当然会导致语法错误。 有人能想到我现在缺少的东西吗?

你可以试试这个

select * from 
(
  SELECT RecordedBy as 'Recorded By', 
         COUNT(*) Total
  FROM mytable  
  WHERE  StartedDate 
         BETWEEN 
          DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP),'00:01AM')  
          AND 
          DATEADD(day,  DATEDIFF(day, 0, CURRENT_TIMESTAMP), '11:59PM')  
) as TAB
group by TAB.RecordedBy 
order by TAB.Total desc

正确的语法是:

select * from 
(
    SELECT RecordedBy as 'Recorded By', COUNT(*) Total  FROM mytable  
    WHERE  StartedDate BETWEEN 
    DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP),'00:01AM')
    AND DATEADD(day, DATEDIFF(day, 0, CURRENT_TIMESTAMP),'11:59PM') 
    group by RecordedBy order by Total desc
) mytable

试试看。

外部选择的要求/改进是什么?无法在内部查询中写入order by子句。请将原始sql SELECT RecordedBy细化为“Recorded by”,COUNT*Total F…。您也无法通过引用原始表名来引用子查询,如下所示。在修复其他语法错误后,只需在此处从子查询中选择*即可。我收到此错误消息Msg 1033,级别15,状态1,第3行ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML@MaVRoSCy您是在视图中执行查询还是在普通查询窗口中执行查询?要使其工作,我必须将ORDERBY子句从内部sql转到外部sql。如果按您键入的方式保留,则会出现此错误。除非还指定了TOP或FOR XML,否则ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效。你是对的。order by在内部查询中不起作用。无论如何,如果你把结果放在外面,它可能不会干扰你的结果。