用于访问的SQL Server迁移助手 - '<'附近的语法不正确

时间:2012-01-05 16:06:06

标签: sql-server ms-access

我尝试将此查询从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没有表明错误是哪一行我假设它是第一个实例,因为每一行基本上是相同的。

2 个答案:

答案 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)