我有 3 个数据表,我正在尝试加入 ( TEXTDATA, STOREDATA, SALESDATA
)。我的 TEXTDATA 在其中一个列中有一个名称字符串,因此创建了一个子字符串来查找它。
然后我尝试使用新形成的字符串 ( name
) 作为连接到 SALESDATA 表的基础。
这是我的代码
SELECT b.*,
a.text,
a.textname,
SUBSTRING(a.[textname], CHARINDEX('/ ', a.[textname]) + 1, 11) AS NAME,
c.[Sales],
c.[Customer],
c.[Class]
FROM [dbo].[TEXTDATA] a
INNER JOIN [dbo].[STOREDATA] b
ON a.[ID_TEXTDATA] = b.[ID_STOREDATA]
LEFT JOIN [dbo].[SALESDATA] c
ON NAME = c.FirstName
Run Code Online (Sandbox Code Playgroud)
错误说Invalid column name 'name'
关于如何引用稍后在查询中创建的新列有什么想法吗?
非常感谢!
最简单的选择就是在 LEFT JOIN 的 ON 子句中使用相同的公式:
LEFT JOIN [dbo].[SALESDATA] c
ON SUBSTRING(a.[textname],CHARINDEX('/ ',a.[textname])+1,11) = c.FirstName
Run Code Online (Sandbox Code Playgroud)
或者您可以将公式放入 TEXTDATA 表的 CTE 抽象中:
;with cte AS (
SELECT [ID_TEXTDATA], text, textname, SUBSTRING(a.[textname],CHARINDEX('/ ',a.[textname])+1,11) as name
From [dbo].[TEXTDATA] a
)
SELECT b.*
,cte.text
,cte.textname
,cte.name
,c.[Sales]
,c.[Customer]
,c.[Class]
From
cte
INNER JOIN [dbo].[STOREDATA] b
on cte.[ID_TEXTDATA] = b.[ID_STOREDATA]
LEFT JOIN [dbo].[SALESDATA] c
on cte.name = c.FirstName
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5319 次 |
最近记录: |