我尝试将此查询从Access迁移到SQL Server中的视图:
CREATE VIEW dbo.[2010Q1-Q2 BLABSI Rate by Hospitalstep1]
AS
SELECT
[AcuteHospitals].[HospitalName],
[SummaryYQ_LOV].[SummaryYQ],
Sum([RateTable_CLABData].[clabcount]) AS [Number of CLABSI],
Sum([RateTable_CLABData].[numcldays]) AS [Central Line Days],
(CASE
WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN 'a'
ELSE (CASE
WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN 'c'
ELSE 'b'
END)
END) AS SizeCat,
(CASE
WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN '<200 Licensed Beds'
ELSE (CASE
WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN '>500 Licensed Beds'
ELSE '201-500 Licensed Beds'
END)
END) AS BedSize
FROM
([AcuteHospitals]
LEFT JOIN [RateTable_CLABData]
ON [AcuteHospitals].[NHSN_ID] = [RateTable_CLABData].[orgID])
LEFT JOIN [SummaryYQ_LOV]
ON [RateTable_CLABData].[summaryYQ] = [SummaryYQ_LOV].[StartDate]
WHERE ((([RateTable_CLABData].[loccdc]) NOT LIKE '%ped%'))
GROUP BY [AcuteHospitals].[HospitalName], [SummaryYQ_LOV].[SummaryYQ], (
CASE
WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN 'a'
ELSE (
CASE
WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN 'c'
ELSE 'b'
END)
END), (
CASE
WHEN < '201' THEN '≤200 Licensed Beds'
ELSE (
CASE
WHEN > '500' THEN '>500 Licensed Beds'
ELSE '201-500 Licensed Beds'
END)
END)
GO
但我一直在'&lt;'上收到语法错误我不知道为什么。
实际上有4行像[AcuteHospitals].[LicensedBeds] < '201' THEN
但是SSMA没有表明错误是哪一行我假设它是第一个实例,因为每一行基本上是相同的。
答案 0 :(得分:1)
如果[AcuteHospitals].[LicensedBeds]
是数字列,则不应将其与字符串值进行比较:
使用
[AcuteHospitals].[LicensedBeds] < 201
而不是
[AcuteHospitals].[LicensedBeds] < '201'
访问对SQL Server这样的事情更加宽容。
答案 1 :(得分:1)
我从您发布的代码段中看到的一些内容。
1)你有两个开括号,但只有一个关闭。这可能与您的错误有关。实际上,CASE语句周围不需要任何括号。
2)您可以将CASE语句简化为以下内容。
CASE
WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN 'a'
WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN 'c'
ELSE 'b'
END
但是,如果没有看到整个查询,我无法确定这是导致错误的原因。
修改强>
问题在于您的GROUP BY
。您需要<
和>
CASE
WHEN < '201' THEN '≤200 Licensed Beds'
ELSE (
CASE
WHEN > '500' THEN '>500 Licensed Beds'
ELSE '201-500 Licensed Beds'
END)
END)