Sql 错误消息:Concat函数需要2个参数

Sql 错误消息:Concat函数需要2个参数,sql,sql-server,concat,Sql,Sql Server,Concat,我有以下代码,当作为查询运行时可以正常工作,但当作为视图运行时返回错误消息。我已附上错误消息。我想我在什么地方少了一个支架。如果有人能帮忙,我们将不胜感激 “CONCAT”函数必须至少有两个参数 但是,在语句的许多地方,没有传递两个参数/列来连接 如果要从Firstname和LastName中显示Fullname,则必须编写: CONCAT(Firstname, Lastname) 连接的字段中可能存在空值。我已将ISNULL函数应用于外部联接表中的列。 只需使用下面的格式化代码即可 SE

我有以下代码,当作为查询运行时可以正常工作,但当作为视图运行时返回错误消息。我已附上错误消息。我想我在什么地方少了一个支架。如果有人能帮忙,我们将不胜感激

“CONCAT”函数必须至少有两个参数

但是,在语句的许多地方,没有传递两个参数/列来连接

如果要从
Firstname
LastName
中显示
Fullname
,则必须编写:

CONCAT(Firstname, Lastname)

连接的字段中可能存在空值。我已将ISNULL函数应用于外部联接表中的列。 只需使用下面的格式化代码即可

 SELECT      CASE 
                WHEN a.Sex = 1 
                    THEN 'M' 
                WHEN a.Sex = 2 
                    THEN 'F' 
            END AS Derived_Sex, 
            CASE
                WHEN LTRIM(RTRIM(CONCAT(ISNULL(b.Complete,''), a.[CALCULATED_AGE]))) LIKE 'A%' 
                    THEN 'Less than 1' 
                WHEN LTRIM(RTRIM(concat(ISNULL(b.Complete,''), a.[CALCULATED_AGE]))) LIKE 'B%' 
                    THEN 'Less than 1' 
                WHEN LTRIM(RTRIM(concat(ISNULL(b.Complete,''), a.[CALCULATED_AGE]))) LIKE 'C%' 
                    THEN 'Less than 1' 
                ELSE '1 year and above' 
            END AS Derived_InfantCat,
            YEAR(a.DATE_OF_DEATH) AS [Derived_Year of Death], 
            FORMAT(a.DATE_OF_DEATH, 'MM') AS [Derived_Month of Death], 
            YEAR(a.DATE_OF_REGISTRATION) AS [Derived_Year of Registration], 
            FORMAT(a.DATE_OF_REGISTRATION, 'MM') AS [Derived_Month of Registration], 
            CONCAT(LEFT(CONVERT(nvarchar, a.DATE_OF_DEATH, 21), 4), 
            SUBSTRING(CONVERT(nvarchar, a.DATE_OF_DEATH, 21), 6, 2)) AS [Derived_YearMonth of Death], 
            CONCAT(LEFT(CONVERT(nvarchar, a.DATE_OF_REGISTRATION, 21), 4), 
            SUBSTRING(CONVERT(nvarchar, a.DATE_OF_REGISTRATION, 21), 6, 2)) AS [Derived_YearMonth of Registration], 
            CASE 
                WHEN LEN(
                        CASE 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                        END) = 3 
                THEN CONCAT(
                        CASE 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                        END, 'X') 
                ELSE 
                        (CASE 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                        END) 
            END AS [Derived_Cause of Death Code], 
            c.[4 character DESCRIPTION], 
            c.[3 character Sub-Chapter Description], 
            d.[District_Name] AS [LA NAME],
            e.[WD14NM] AS [WARD NAME],


            (
            CASE
                WHEN a.[NHS_ESTABLISHMENT_IND] = '1'
                    THEN 'NHS'
                WHEN  a.[NHS_ESTABLISHMENT_IND] = '2'
                    THEN 'NON-NHS'
                ELSE 'OTHER'
            END) AS [NHS ESTABLISHMENT TYPE DESCRIPTION],
            (
            CASE
                WHEN a.[NHS_ESTABLISHMENT_IND] = '1'
                    THEN 'NHS'
                WHEN  a.[NHS_ESTABLISHMENT_IND] = '2'
                    THEN 'NON-NHS'
                ELSE 'OTHER'
            END) AS [NHS ESTABLISHMENT TYPE DESCRIPTION],
            (
            CASE
                WHEN a.[NHS_ESTABLISHMENT_IND] = '1'
                    THEN 'NHS'
                WHEN  a.[NHS_ESTABLISHMENT_IND] = '2'
                    THEN 'NON-NHS'
                ELSE 'OTHER'
            END) AS [NHS ESTABLISHMENT TYPE DESCRIPTION],
            (
            CASE
                WHEN a.PLACE_OF_DEATH_CODE = 'H'
                    THEN 'HOME'
                WHEN  a.PLACE_OF_DEATH_CODE = 'E'
                    THEN 'ELSEWHERE'
                ELSE 'OTHER'
            END
            ) AS [PLACE OF DEATH CODE],
            concat(a.[NHS_ESTABLISHMENT_IND],'-',a.PLACE_OF_DEATH_CODE) as code
FROM        RAW.dbo.ONS_Death_DOD201516FYQ1 AS a 
                LEFT OUTER JOIN REFERENCE.dbo.[ONS-PCMD_AGE] AS b 
                    ON a.CALCULATED_AGE_UNIT = b.[Age Unit] 
                LEFT OUTER JOIN REFERENCE.dbo.[OTH_ICD-10] AS c 
                    ON 
                        CASE 
                            WHEN LEN(
                                    CASE 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                                    END) = 3 
                            THEN CONCAT
                                (
                                    CASE 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1]
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                                    END, 'X') 
                             ELSE (
                                    CASE 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                                    END) 
                        END = c.[4 CharacterDiagnosis Code]
            LEFT OUTER JOIN REFERENCE.dbo.GEOG_LANames_1991 AS d
                        ON a.[ULA_OF_RESIDENCE_CODE]    = d.[ONS_District_Code]
            LEFT OUTER JOIN REFERENCE.dbo.GEOG_WardNames_2014 AS e
                        ON CONCAT(ISNULL(a.[ULA_OF_RESIDENCE_CODE],''),ISNULL(a.[WARD_OF_RESIDENCE_CODE],'')) =e.WD14CDO

我收到以下错误消息:Msg 102,级别15,状态1,第125行“=”附近的语法不正确。感谢您坚持,不幸的是,仍然得到相同的错误代码。我已再次运行SQL。它在查询表单中工作正常,但在视图表单中工作不正常。不幸的是,回到原点1。谢谢你的帮助。你能检查一下代码的最后一行写得是否正确吗。在CONCAT上(ISNULL(一个[住宅区代码],''),ISNULL(一个[住宅区代码],'')=e.wd14cdofatastico!:)成功了。请告诉我你是怎么做的,因为这不是我第一次在CONCAT问题上遇到这样的错误。这是否意味着它必须在Select部分声明?
 SELECT      CASE 
                WHEN a.Sex = 1 
                    THEN 'M' 
                WHEN a.Sex = 2 
                    THEN 'F' 
            END AS Derived_Sex, 
            CASE
                WHEN LTRIM(RTRIM(CONCAT(ISNULL(b.Complete,''), a.[CALCULATED_AGE]))) LIKE 'A%' 
                    THEN 'Less than 1' 
                WHEN LTRIM(RTRIM(concat(ISNULL(b.Complete,''), a.[CALCULATED_AGE]))) LIKE 'B%' 
                    THEN 'Less than 1' 
                WHEN LTRIM(RTRIM(concat(ISNULL(b.Complete,''), a.[CALCULATED_AGE]))) LIKE 'C%' 
                    THEN 'Less than 1' 
                ELSE '1 year and above' 
            END AS Derived_InfantCat,
            YEAR(a.DATE_OF_DEATH) AS [Derived_Year of Death], 
            FORMAT(a.DATE_OF_DEATH, 'MM') AS [Derived_Month of Death], 
            YEAR(a.DATE_OF_REGISTRATION) AS [Derived_Year of Registration], 
            FORMAT(a.DATE_OF_REGISTRATION, 'MM') AS [Derived_Month of Registration], 
            CONCAT(LEFT(CONVERT(nvarchar, a.DATE_OF_DEATH, 21), 4), 
            SUBSTRING(CONVERT(nvarchar, a.DATE_OF_DEATH, 21), 6, 2)) AS [Derived_YearMonth of Death], 
            CONCAT(LEFT(CONVERT(nvarchar, a.DATE_OF_REGISTRATION, 21), 4), 
            SUBSTRING(CONVERT(nvarchar, a.DATE_OF_REGISTRATION, 21), 6, 2)) AS [Derived_YearMonth of Registration], 
            CASE 
                WHEN LEN(
                        CASE 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                        END) = 3 
                THEN CONCAT(
                        CASE 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                        END, 'X') 
                ELSE 
                        (CASE 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                            ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                        END) 
            END AS [Derived_Cause of Death Code], 
            c.[4 character DESCRIPTION], 
            c.[3 character Sub-Chapter Description], 
            d.[District_Name] AS [LA NAME],
            e.[WD14NM] AS [WARD NAME],


            (
            CASE
                WHEN a.[NHS_ESTABLISHMENT_IND] = '1'
                    THEN 'NHS'
                WHEN  a.[NHS_ESTABLISHMENT_IND] = '2'
                    THEN 'NON-NHS'
                ELSE 'OTHER'
            END) AS [NHS ESTABLISHMENT TYPE DESCRIPTION],
            (
            CASE
                WHEN a.[NHS_ESTABLISHMENT_IND] = '1'
                    THEN 'NHS'
                WHEN  a.[NHS_ESTABLISHMENT_IND] = '2'
                    THEN 'NON-NHS'
                ELSE 'OTHER'
            END) AS [NHS ESTABLISHMENT TYPE DESCRIPTION],
            (
            CASE
                WHEN a.[NHS_ESTABLISHMENT_IND] = '1'
                    THEN 'NHS'
                WHEN  a.[NHS_ESTABLISHMENT_IND] = '2'
                    THEN 'NON-NHS'
                ELSE 'OTHER'
            END) AS [NHS ESTABLISHMENT TYPE DESCRIPTION],
            (
            CASE
                WHEN a.PLACE_OF_DEATH_CODE = 'H'
                    THEN 'HOME'
                WHEN  a.PLACE_OF_DEATH_CODE = 'E'
                    THEN 'ELSEWHERE'
                ELSE 'OTHER'
            END
            ) AS [PLACE OF DEATH CODE],
            concat(a.[NHS_ESTABLISHMENT_IND],'-',a.PLACE_OF_DEATH_CODE) as code
FROM        RAW.dbo.ONS_Death_DOD201516FYQ1 AS a 
                LEFT OUTER JOIN REFERENCE.dbo.[ONS-PCMD_AGE] AS b 
                    ON a.CALCULATED_AGE_UNIT = b.[Age Unit] 
                LEFT OUTER JOIN REFERENCE.dbo.[OTH_ICD-10] AS c 
                    ON 
                        CASE 
                            WHEN LEN(
                                    CASE 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                                    END) = 3 
                            THEN CONCAT
                                (
                                    CASE 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1]
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                                    END, 'X') 
                             ELSE (
                                    CASE 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) = '' 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        WHEN (a.UNDERLYING_CAUSE_OF_DEATH) IS NULL 
                                            THEN a.[CAUSE_OF_DEATH_ICD_CODE_1] 
                                        ELSE a.UNDERLYING_CAUSE_OF_DEATH 
                                    END) 
                        END = c.[4 CharacterDiagnosis Code]
            LEFT OUTER JOIN REFERENCE.dbo.GEOG_LANames_1991 AS d
                        ON a.[ULA_OF_RESIDENCE_CODE]    = d.[ONS_District_Code]
            LEFT OUTER JOIN REFERENCE.dbo.GEOG_WardNames_2014 AS e
                        ON CONCAT(ISNULL(a.[ULA_OF_RESIDENCE_CODE],''),ISNULL(a.[WARD_OF_RESIDENCE_CODE],'')) =e.WD14CDO