Я никогда не видел ничего подобного [Числа по кварталам и по размеру] .SizeCategory
Это пример точечного имени. Элемент слева от точки является именем корреляции. Если вы не предоставите явное имя корреляции в предложении from, то будет использоваться имя корреляции по умолчанию, равное имени таблицы. Например
SELECT [Numbers by Quarter and Bedsize].SizeCategory
FROM [Numbers by Quarter and Bedsize];
... фактически анализируется как:
SELECT [Numbers by Quarter and Bedsize].SizeCategory
FROM [Numbers by Quarter and Bedsize] AS [Numbers by Quarter and Bedsize];
Вы увидите корреляционное имя, называемое «псевдонимом», которое не является правильным, но, к сожалению, стало общеупотребительным.
Возможно, это облегчает чтение кода, если выбрано короткое имя корреляции, например
SELECT n.SizeCategory
FROM [Numbers by Quarter and Bedsize] AS n;
Квадратные скобки вокруг имени таблицы - это идентификаторы в кавычках. В стандартном SQL идентификатором в кавычках является двойная кавычка ("
). Ядро базы данных Access (ACE, Jet, что угодно) не соответствует стандарту SQL и использует квадратные скобки. SQL Server может использовать как стандартные, так и собственные квадратные скобки в качестве идентификаторов в кавычках.
Для доступа требуются заключенные в кавычки идентификаторы, если элемент данных в противном случае был бы недопустимым, например, содержит или начинается с пробелов или не-буквенных символов. В запросе Access при помощи примера построителя добавляются заключенные в кавычки идентификаторы вокруг всех имен элементов данных независимо от того, требуются ли они на самом деле.
Имя таблицы Numbers by Quarter and Bedsize
требует идентификаторов кавычек из-за наличия пробелов. Я предлагаю вам использовать порт как возможность переименовать элементы данных. В то время как полная ревизия, вероятно, должна быть произведена (я бы поставил под сомнение общее качество выбранных имен), некоторые «низко висящие фрукты» могли бы заменить пробел символами подчеркивания.
Следуя вышеприведенному совету и добавив некоторое форматирование, запрос будет выглядеть так:
SELECT n.SizeCategory,
n.Bedsize,
n.SumOfNumber_of_CLABSI,
n.SumOfCentral_Line_Days,
Round(1000 * n.SumOfNumber_of_CLABSI / n.SumOfCentral_Line_Days, 2)
AS State_CLABSI_Rate,
n.SummaryYQ
FROM Numbers_by_Quarter_and_Bedsize AS n
ORDER
BY SizeCategory, SummaryYQ;
Очевидно, порт будет связан с изменениями синтаксиса, но вы также должны искать изменения в поведении. Например, деление в Access SQL приводит к FLOAT
, если только одно из значений не имеет тип DECIMAL
, и в этом случае результат равен DECIMAL
; поведение в SQL Server отличается. Одна из проблем, с которой вы столкнетесь, - это крайне скудная документация для Access, например утверждение, которое я только что сделал о разделении, не указано ни в справке Access, ни в какой-либо другой официальной документации от Microsoft; Я должен был понять это для себя методом проб и ошибок.
Я рекомендую вам написать всесторонние тесты как в Access, так и в SQL Server, чтобы убедиться, что ваш перенесенный SQL не приведет к изменению поведения.