缩小sql结果集的范围
我有以下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
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在内部查询中不起作用。无论如何,如果你把结果放在外面,它可能不会干扰你的结果。