【发布时间】:2020-06-02 09:57:14
【问题描述】:
我正在尝试使用 SQL 查询从 Excel 中提取值,但我一直在努力按各自的顺序对月份进行排序。现在表格正在按 A-Z 排序,我尝试使用 DATEPART,但不是很成功,因为我收到了 Int16 错误。
Select F1,
SUM(F2),
ROUND(SUM(REPLACE(F3, ',', '.')), 2),
ROUND(SUM(REPLACE(F4, ',', '.')), 2)
FROM [Sheet1$]
WHERE F1 IN ('January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December')
GROUP BY F1;
这是有效的查询,但结果是:
我也愿意接受任何可以提高我的查询速度的建议,因为文档很大,大约 50k 行,谢谢。
对于任何想知道最终查询是否有效的人:
Select F1,
SUM(F2),
ROUND(SUM(REPLACE(F3, ',', '.')), 2),
ROUND(SUM(REPLACE(F4, ',', '.')), 2)
FROM [Sheet1$]
WHERE F1 IN ('January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December')
GROUP BY F1
ORDER BY SWITCH(
F1='January', 1,
F1='February', 2,
F1='March', 3,
F1='April', 4,
F1='May', 5,
F1='June', 6,
F1='July', 7,
F1='August', 8,
F1='September', 9,
F1='October', 10,
F1='November', 11,
F1='December', 12
);
【问题讨论】:
-
如果您需要性能建议,请发布执行计划。
-
代替 Switch(),考虑:
ORDER BY Month([F1] & " 1, 2000") -
或
ORDER BY DatePart("m", F1 & " 1 2000")
标签: sql-server tsql date oledb blueprism