如何在SELECT区域中编写方程式

时间:2019-06-11 20:54:27

标签: sql select inner-join trim

我有2个已加入的表,其中一个包含“材料”,另一个包含“模具”。它们由材料ID组成。

我希望最终结果是所使用的所有唯一材料的表。

我遇到的问题是材料名称中有长度。 (例如10'枫木,8'枫木),我想在获得独特材料时将它们排除在外。

我现在得到的是:

10' Maple
8' Maple
3' Maple
7' Cherry

我想要什么:

Maple
Cherry

我现在要尝试的是在选择表时摆脱数字。尽管我有限的SQL知识使工作变得困难。

SELECT LTrim(Right([CxMaterial].[Name],Len([CxMaterial].[Name])-5)) AS [EditedMaterial]
FROM [Molding] INNER JOIN
     [CxMaterial]
     ON [Molding].[Material ID] = [CxMaterial].[ID] 
GROUP BY [EditedMaterial]

RIGHT和LEN摆脱数字 修剪是为了修剪空格(有些数字有2位,有些数字有1位)

主要错误是“您试图执行不包含指定表达式'LTRIM(...- 5))作为聚合函数一部分的查询”

以及尝试修复该问题时出现的一系列语法错误

感谢任何帮助 谢谢

3 个答案:

答案 0 :(得分:0)

我假设您正在使用SQL Server。

如果只想在第一个空格之后输入所有内容,则可以使用stuff()charindex()

select stuff(str, 1, charindex(' ', str), '')
from (values ('7'' Cherry')) v(str)

答案 1 :(得分:0)

我将使用SUBSTRING()CHARINDEX()

SELECT SUBSTRING([CxMaterial].[Name], CHARINDEX(' ',[CxMaterial].[Name]),[CxMaterial].[Name])) AS [EditedMaterial]
FROM [Molding] INNER JOIN
     [CxMaterial]
     ON [Molding].[Material ID] = [CxMaterial].[ID] 
GROUP BY [EditedMaterial]

答案 2 :(得分:0)

最后知道了

SELECT (LTrim(Right([CxMaterial].[Name],Len([CxMaterial].[Name])-5)))

FROM ([Molding] INNER JOIN [CxMaterial] ON [Molding].[Material ID] = [CxMaterial].[ID])  

GROUP BY (LTrim(Right([CxMaterial].[Name],Len([CxMaterial].[Name])-5)))

它起作用了,尽管我觉得很奇怪