Sql server 在Sql上计算中值
我对SQL非常陌生。我正在尝试使用下面的代码,它不断给我以下错误- Msg ORDER BY子句在中无效 视图、内联函数、派生 表、子查询和公共表 表达式,除非使用TOP或FOR XML 也指定了 “2”附近的语法不正确 有人能帮忙吗?我哪里出错了 我只是想计算中位数 有人可以建议修改这个代码,因为我已经拿起别人的工作 任何帮助都将不胜感激Sql server 在Sql上计算中值,sql-server,Sql Server,我对SQL非常陌生。我正在尝试使用下面的代码,它不断给我以下错误- Msg ORDER BY子句在中无效 视图、内联函数、派生 表、子查询和公共表 表达式,除非使用TOP或FOR XML 也指定了 “2”附近的语法不正确 有人能帮忙吗?我哪里出错了 我只是想计算中位数 有人可以建议修改这个代码,因为我已经拿起别人的工作 任何帮助都将不胜感激 SELECT TOP (100) PERCENT Name, Sales Median FROM (SELECT a1.
SELECT
TOP (100) PERCENT Name, Sales Median
FROM
(SELECT
a1.Name, a1.Sales, COUNT(a1.Sales) Rank
FROM
PSE.vw_EM_Data a1, PSE.vw_EM_Data a2
WHERE
a1.Sales < a2.Sales OR
(a1.Sales = a2.Sales AND a1.Name <= a2.Name)
GROUP BY
a1.Name, a1.Sales
ORDER BY
a1.Sales DESC) a3
WHERE
Rank = (SELECT (COUNT(*) + 1) DIV 2 FROM Total_Sales);
WHERE
(Name LIKE 'John%')
AND (DISPOSAL = '1')
AND (DATE BETWEEN CONVERT(DATETIME, '2010-04-01 00:00:00', 102) AND CONVERT(DATETIME, '2011-03-30 00:00:00', 102))
您的问题来自子选择a3中的订单
为什么不看一下如何使用一些东西来指出: 1我永远不会使用您在内部SELECT中使用的旧式联接语法-它很容易导致不需要的笛卡尔乘积-就像您的情况一样,尽管我不确定这是否需要 因此,不是:
FROM
PSE.vw_EM_Data a1, PSE.vw_EM_Data a2
我建议使用正确的ANSI连接语法
FROM
PSE.vw_EM_Data a1
INNER JOIN -- or possibly: LEFT OUTER JOIN or even FULL OUTER JOIN
PSE.vw_EM_Data a2 ON a1.Sales = a2.Sales
这会让你更清楚你真正想要的是什么,并避免任何不必要的问题
2在第二个WHERE子句中,首先不需要所有括号,最重要的是,不应该将DATE或DATETIME列转换为字符串,然后进行比较,因此:
WHERE
(Name LIKE 'John%')
AND (DISPOSAL = '1')
AND (DATE BETWEEN CONVERT(DATETIME, '2010-04-01 00:00:00', 102) AND CONVERT(DATETIME, '2011-03-30 00:00:00', 102))
改用这个:
WHERE
Name LIKE 'John%'
AND DISPOSAL = '1'
AND [DATE] BETWEEN '2010-04-01T00:00:00' AND '2011-03-30T00:00:00'
我也会尽量避免使用SQL-like-DATE中的关键字名称来调用列-您必须在其周围使用方括号,以使SQL Server清楚地了解情况。请将您查询的格式设置为代码示例-使其可读。