Как написать уравнения в области SELECT - PullRequest
0 голосов
/ 11 июня 2019

У меня есть 2 таблицы, к которым я присоединился, одна содержит «Материалы», а другая - «Молдинги».К ним присоединяется идентификатор материала.

Я хочу, чтобы конечный результат представлял собой таблицу всех используемых уникальных материалов.

Проблема, с которой я сталкиваюсь, заключается в том, что материалы имеютдлины в имени.(например, 10 'Maple, 8' Maple), и я хотел бы исключить их при получении уникальных материалов.

Что я получаю сейчас:

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]

ПРАВО и LEN должны избавиться от чисел. Обрезка - урезать пробелы (так как некоторые имеют 2 цифры, а некоторые имеют 1)

Основными ошибками являются «вы пытались выполнить запрос, который не включает указанное выражение« LTRIM (...- 5)) »как часть агрегатной функции»

и связкуСинтаксические ошибки, когда я пытаюсь решить эту проблему

Любая помощь приветствуется Спасибо

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

Я бы использовал 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]
0 голосов
/ 13 июня 2019

Наконец-то получил

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)))

Это работает, хотя я нахожу странным, что раньше этого не было

0 голосов
/ 11 июня 2019

Я предполагаю, что вы используете SQL Server.

Если вам просто нужно все после первого пробела, вы можете использовать stuff() и charindex():

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