Assistant de migration SQL Server pour Access – Syntaxe incorrecte près de '<'

En essayant de migrer cette requête de l'access à une vue dans 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 

Mais je continue d'get une erreur de syntaxe sur le '<' et je ne sais pas pourquoi.

Il y a en fait 4 lignes comme [AcuteHospitals].[LicensedBeds] < '201' THEN mais la SSMA n'indique pas quelle ligne l'erreur est sur l'Im en supposant que c'est la première instance puisque chaque ligne est essentiellement la même.

Si [AcuteHospitals].[LicensedBeds] est une colonne numérique, vous ne devez pas le comparer avec des valeurs de string:

Utilisation

 [AcuteHospitals].[LicensedBeds] < 201 

au lieu de

 [AcuteHospitals].[LicensedBeds] < '201' 

L'access est plus tolérant à propos de choses comme ça que SQL Server.

Quelques choses que je vois de l'extrait que vous avez posté.

1) Vous avez deux parenthèses ouvertes, mais une seule ferme. Cela pourrait être lié à votre erreur. Vous n'avez besoin d'aucune parenthèse autour d'une instruction CASE.

2) Vous pouvez simplifier votre déclaration CASE à ce qui suit.

 CASE WHEN [AcuteHospitals].[LicensedBeds] < '201' THEN 'a' WHEN [AcuteHospitals].[LicensedBeds] > '500' THEN 'c' ELSE 'b' END 

Cependant, je ne peux pas être certain que c'est la cause de votre erreur sans voir la requête entière.

modifier

Le problème est avec votre GROUP BY . Vous avez besoin d'un opérande de gauche pour les < et >

  CASE WHEN < '201' THEN '≤200 Licensed Beds' ELSE ( CASE WHEN > '500' THEN '>500 Licensed Beds' ELSE '201-500 Licensed Beds' END) END)