SQL查询中的Synatx错误
我有一个查询,它给了我语法错误。我不明白。请帮我整理一下SQL查询中的Synatx错误,sql,sql-server,Sql,Sql Server,我有一个查询,它给了我语法错误。我不明白。请帮我整理一下 SELECT T3.[AcctName], SUM(T0.[DebLTotal]/85) AS buget,(Select sum(T3.[Debit]/85) From JDT1 T3 ) as 'CurrentBudget' FROM OBGT T0 INNER JOIN (SELECT CASE WHEN T1.[AcctCode] = '5001' THEN T1.[Acct
SELECT
T3.[AcctName],
SUM(T0.[DebLTotal]/85) AS buget,(Select sum(T3.[Debit]/85) From JDT1 T3 ) as 'CurrentBudget'
FROM
OBGT T0
INNER JOIN
(SELECT
CASE WHEN T1.[AcctCode] = '5001' THEN T1.[AcctName] = 'Salaries'
END as [AcctName],
[AcctCode]
FROM
OACT AS T1) AS T3 ON T0.[AcctCode] = T3.[AcctCode]
INNER JOIN
OBGS T2 ON T0.[Instance] = T2.[AbsId]
WHERE
T2.[Name] = 'Main Budget 2015'
GROUP BY
T3.[AcctName], T2.[Name]
我在这一行的“=”附近得到了错误的语法
SELECT CASE WHEN T1.[AcctCode] = '5001' THEN T1.[AcctName] = 'Salaries'
是不是因为你把一个数字放在了周围?试着把它写成T1。[AcctCode]=5001
这可能是因为你在一个数字周围放了一个“数字”吗?尝试将其写为T1。[AcctCode]=5001
这应该可以解决您的问题,下面的行不正确
SELECT CASE WHEN T1.[AcctCode] = '5001' THEN T1.[AcctName] = 'Salaries'
SELECT T3.[AcctName] ,
SUM(T0.[DebLTotal] / 85) AS buget ,
( SELECT SUM(T3.[Debit] / 85)
FROM JDT1 T3
) AS 'CurrentBudget'
FROM OBGT T0
INNER JOIN ( SELECT CASE WHEN T1.[AcctCode] = '5001' THEN 'Salaries'
ELSE T1.[AcctName]
END AS [AcctName] ,
[AcctCode]
FROM OACT AS T1
) AS T3 ON T0.[AcctCode] = T3.[AcctCode]
INNER JOIN OBGS T2 ON T0.[Instance] = T2.[AbsId]
WHERE T2.[Name] = 'Main Budget 2015'
GROUP BY T3.[AcctName] ,
T2.[Name]
这将解决您的问题,下面的行不正确
SELECT CASE WHEN T1.[AcctCode] = '5001' THEN T1.[AcctName] = 'Salaries'
SELECT T3.[AcctName] ,
SUM(T0.[DebLTotal] / 85) AS buget ,
( SELECT SUM(T3.[Debit] / 85)
FROM JDT1 T3
) AS 'CurrentBudget'
FROM OBGT T0
INNER JOIN ( SELECT CASE WHEN T1.[AcctCode] = '5001' THEN 'Salaries'
ELSE T1.[AcctName]
END AS [AcctName] ,
[AcctCode]
FROM OACT AS T1
) AS T3 ON T0.[AcctCode] = T3.[AcctCode]
INNER JOIN OBGS T2 ON T0.[Instance] = T2.[AbsId]
WHERE T2.[Name] = 'Main Budget 2015'
GROUP BY T3.[AcctName] ,
T2.[Name]
问题是您在
SELECT
CASE WHEN T1.[AcctCode] = '5001' THEN T1.[AcctName] = 'Salaries'
END as [AcctName],
[AcctCode]
FROM
OACT AS T1
这是行不通的,因为CASE
只是T-SQL中的一个表达式——它只能返回一个原子值——它不能进行分配或控制代码流
您需要这样使用它:
SELECT
[AcctName] = CASE
WHEN [AcctCode] = N'5001' THEN 'Salaries'
ELSE 'Other'
END,
[AcctCode]
FROM
OACT AS T1
如果您的actcode
是5001-那么您使用Salaries
作为AcctName
(如果它是另一个值-您想做什么?)
更新:不确定您所说的仅执行其他部分是什么意思-请查看此演示:
DECLARE @t1 TABLE (ID INT NOT NULL, AcctCode INT)
INSERT INTO @T1 VALUES(1, 5000), (2, 5001), (3, 5000), (4, 5002), (5, 5001), (6, 4999)
SELECT
[AcctName] = CASE
WHEN [AcctCode] = 5001 THEN 'Salaries'
ELSE 'Other'
END,
[AcctCode]
FROM @T1
输出将<强>清楚地显示< <代码>案例> /COD>表达式工作正常-对于<代码> 5001代码/代码>的值,<代码> ActNeX<代码>被设置为<代码>薪资< /代码>,而对于所有其他值,它返回“代码>其他< /代码> .< /p> < P>问题是您在
SELECT
CASE WHEN T1.[AcctCode] = '5001' THEN T1.[AcctName] = 'Salaries'
END as [AcctName],
[AcctCode]
FROM
OACT AS T1
这是行不通的,因为CASE
只是T-SQL中的一个表达式——它只能返回一个原子值——它不能进行分配或控制代码流
您需要这样使用它:
SELECT
[AcctName] = CASE
WHEN [AcctCode] = N'5001' THEN 'Salaries'
ELSE 'Other'
END,
[AcctCode]
FROM
OACT AS T1
如果您的actcode
是5001-那么您使用Salaries
作为AcctName
(如果它是另一个值-您想做什么?)
更新:不确定您所说的仅执行其他部分是什么意思-请查看此演示:
DECLARE @t1 TABLE (ID INT NOT NULL, AcctCode INT)
INSERT INTO @T1 VALUES(1, 5000), (2, 5001), (3, 5000), (4, 5002), (5, 5001), (6, 4999)
SELECT
[AcctName] = CASE
WHEN [AcctCode] = 5001 THEN 'Salaries'
ELSE 'Other'
END,
[AcctCode]
FROM @T1
输出将清楚地显示我的
CASE
表达式工作正常-对于5001
的值,AcctName
设置为Salaries
,而对于所有其他值,它返回other,我只得到此查询的其他部分
SELECT
T3.[AcctName] ,
SUM(T0.[DebLTotal] / 85) AS buget ,
(SELECT SUM(T3.[Debit] / 85)
FROM JDT1 T3) AS 'CurrentBudget'
FROM
OBGT T0
INNER JOIN
(SELECT
AcctName = CASE
WHEN T1.[AcctCode] = '10' THEN 'Fixed Assets'
WHEN T1.[AcctCode] = '50' THEN 'Salaries'
ELSE 'Other'
END,
[AcctCode]
FROM
OACT AS T1) AS T3 ON T0.[AcctCode] = T3.[AcctCode]
INNER JOIN
OBGS T2 ON T0.[Instance] = T2.[AbsId]
WHERE
T2.[Name] = 'Main Budget 2015'
GROUP BY
T3.[AcctName], T2.[Name]
只有其他“其他”
在工作。当
时,无论我在我的案例中放置什么,它都会返回一行,如下所示:
AcctName budget
Other 2312836
我只得到这个查询的其他部分
SELECT
T3.[AcctName] ,
SUM(T0.[DebLTotal] / 85) AS buget ,
(SELECT SUM(T3.[Debit] / 85)
FROM JDT1 T3) AS 'CurrentBudget'
FROM
OBGT T0
INNER JOIN
(SELECT
AcctName = CASE
WHEN T1.[AcctCode] = '10' THEN 'Fixed Assets'
WHEN T1.[AcctCode] = '50' THEN 'Salaries'
ELSE 'Other'
END,
[AcctCode]
FROM
OACT AS T1) AS T3 ON T0.[AcctCode] = T3.[AcctCode]
INNER JOIN
OBGS T2 ON T0.[Instance] = T2.[AbsId]
WHERE
T2.[Name] = 'Main Budget 2015'
GROUP BY
T3.[AcctName], T2.[Name]
只有其他“其他”
在工作。当
时,无论我在我的案例中放置什么,它都会返回一行,如下所示:
AcctName budget
Other 2312836
看起来您正在尝试更新case表达式中的列…是的@贾尔赫。。我不明白。如果T1.[AcctCode]='5001',那么T-SQL中的T2.[AcctName]应该是'Salaries'CASE
是一个表达式-它只能返回单个原子值-您不能在then
部分中有赋值@那我怎么才能得到所需的东西呢?如果T1。[AcctCode]=“5001”,那么T2。[AcctName]应该是“Salaries”,看起来您正在尝试更新case表达式中的列……是的@贾尔赫。。我不明白。如果T1.[AcctCode]='5001',那么T-SQL中的T2.[AcctName]应该是'Salaries'CASE
是一个表达式-它只能返回单个原子值-您不能在then
部分中有赋值@那我怎么才能得到所需的东西呢?如果T1.[AcctCode]=“5001”,那么T2.[AcctName]应该是“工资”,这是无法解决的。。你删除了T2。[账号],我需要它。如果T1.[AcctCode]=“5001”,那么T2.[AcctName]应该是“工资”,这是无法解决的。。你删除了T2。[账号],我需要它。如果T1.[AcctCode]='5001',那么T2.[AcctName]应该是'Salaries',它仍然会给我同样的错误。如果我删除那些too,它仍然会给我同样的错误。如果我删除那些tooth'Other'。通过使用这个,我现在得到的是,nvarchar值“1000000000000”的转换溢出了一个int列。@Kirat:不确定您的AcctCode
的数据类型是什么-因为它包含“code”,我假设它是一个数字列。如果不是-那么在值'5001'
周围加上单引号,我以前没有注意到。您的代码只执行其他部分。请告诉我答案。我不能再提另一个问题了。@Kirat:我不知道你的电脑发生了什么事-它对我来说很好(请参阅我的最新回复)-一定是其他原因导致了你的问题-对不起,不能说那是什么,从这里开始…然后是“其他”。通过使用这个,我现在得到的是,nvarchar值“1000000000000”的转换溢出了一个int列。@Kirat:不确定您的AcctCode
的数据类型是什么-因为它包含“code”,我假设它是一个数字列。如果不是-那么在值'5001'
周围加上单引号,我以前没有注意到。您的代码只执行其他部分。请告诉我答案。我不能再提另一个问题了。@Kirat:我不知道你的计算机上发生了什么事-它对我来说运行正常(请参阅我的最新回复)-一定是其他原因导致了你的问题-对不起,我不能从这里说这是什么…AcctCode
列的数据类型是什么,你有什么样的样本数据???@marc_s it is nvarchar(20)你能运行这个查询并在你的例子中输出AcctCode
??该字符串中是否有任何特殊字符,或者是否有前导空格或类似的内容??是的@marc_s我可以运行。没有比这更好的了。我不知道怎么了。我也在这里贴。但你的那个很好用。我只是不知道为什么不working@marc_s如果主select语句正在生效,是否可能。。可能是。。是吗?AcctCode
列的数据类型是什么?您在其中有什么样的样本数据???@marc_s是nvarchar(20)您可以运行此查询并