【发布时间】:2011-11-22 19:19:25
【问题描述】:
我无法弄清楚为什么这段代码作为查询执行,但是当我在视图中执行它时,它会抛出一个多部分标识符无法绑定,错误。
当我取出case语句时它在视图中起作用,所以我认为它与case语句有关。
欢迎提出任何建议。
WITH [cteFrostSum] AS
(
SELECT ID AS ID, theMonth as Mo,
SUM(dbo.Frost.[DRAmount]) AS [DRAmount]
FROM dbo.Frost
GROUP BY [ID], theMonth
)
SELECT DISTINCT
TOP (100) PERCENT
dbo.ternean.MemberID,
dbo.ternean.SSN,
dbo.ternean.GroupName,
dbo.ternean.CustomerID,
dbo.ternean.GroupNumber,
dbo.ternean.LastName,
dbo.Frost.DRAmount,
dbo.Frost.HittheBank,
dbo.Frost.MonthofPremium,
cte.[DRAmount] AS [SUM_Frost_Balance],
dbo.ternean.TotalCost,
cte.[DRAmount] - dbo.ternean.TotalCost AS Diff,
dbo.ternean.ACH_RoutingNo,
dbo.Frost.RTNum,
dbo.ternean.ACH_AcctNo,
dbo.Frost.AccountNumber,
CASE
WHEN dbo.Frost.RTNum <> SUBSTRING(dbo.ternean.ACH_RoutingNo, 2, 20)
THEN 'DO not match'
WHEN dbo.Frost.RTNum = SUBSTRING(dbo.ternean.ACH_RoutingNo, 2, 20)
THEN 'match'
END AS [Routing # match],
CASE
WHEN SUBSTRING(dbo.ternean.ACH_AcctNo, 2, 20) <> dbo.Frost.AccountNumber
THEN 'DO not match'
WHEN SUBSTRING(dbo.ternean.ACH_AcctNo, 2, 20) = dbo.Frost.AccountNumber
THEN 'match'
END AS [Account # match],
dbo.Frost.theMonth
FROM dbo.Frost
INNER JOIN dbo.ternean ON dbo.Frost.ID = dbo.ternean.CustomerID
AND dbo.Frost.theMonth = dbo.ternean.theMonth
INNER JOIN [cteFrostSum] cte ON dbo.Frost.ID = cte.ID
AND dbo.Frost.theMonth = cte.Mo
ORDER BY dbo.ternean.theMonth
【问题讨论】:
-
哪个多部分标识符不能绑定?
-
ACH_RoutingNo 和 ACH_acctNo 的所有值的长度是否至少为 21 个字符?
-
换句话说:选择 ACH_RoutingNo, ACH_AcctNo from dbo.ternean T where len(T.ACH_RoutingNo)
-
这是标识符。无法绑定多部分标识符“dbo.Frost.RTNum”。无法绑定多部分标识符“dbo.Frost.RTNum”。无法绑定多部分标识符“dbo.Frost.AccountNumber”。无法绑定多部分标识符“dbo.Frost.AccountNumber”。
-
No ACH_RoutingNo 和 ACH_acctNo 的值不是 21 个字符,但将来可能是。
标签: sql sql-server sql-server-2008 view