Sql server SQL management studio中的SQL联接查询

Sql server SQL management studio中的SQL联接查询,sql-server,Sql Server,我在一个数据库表dbo.ItemDefinition中有一列,列名是dbo.ItemDefinition.name。此列包含我需要分别提取的三个值—产品名称、类别和子类别。 001-00-0000此Id表示类别,001-01-0000此Id表示子类别,001-01-0001此Id表示产品名称 这可能吗?如果用逗号分隔,可能会对您有所帮助 SELECT dbo.Items.MaxStockLevel ,dbo.Items.MinStockLevel ,dbo.ItemsDefina

我在一个数据库表dbo.ItemDefinition中有一列,列名是dbo.ItemDefinition.name。此列包含我需要分别提取的三个值—产品名称、类别和子类别。

001-00-0000此Id表示类别,001-01-0000此Id表示子类别,001-01-0001此Id表示产品名称
这可能吗?

如果用逗号分隔,可能会对您有所帮助

SELECT dbo.Items.MaxStockLevel
    ,dbo.Items.MinStockLevel
    ,dbo.ItemsDefination.NAME
FROM dbo.Items
INNER JOIN dbo.ItemsDefination ON dbo.Items.BusinessUnitId = dbo.ItemsDefination.BusinessUnitId
    AND dbo.Items.ItemId = dbo.ItemsDefination.ItemId

再想一想,您可以使用SUBSTRING和CHARINDEX:

Declare @temp table(Name Varchar(100))

Insert into @temp
Select 'abc,ert,err'  union all
Select 'abc1,ert1,err1'  union all
Select 'abc2,ert2,err2'  union all
Select 'abc3,ert3,err3'  union all
Select 'abc4,ert4,err4'  


Select PARSENAME(REPLACE(Name,',','.'),1) Produst, 
       PARSENAME(REPLACE(Name,',','.'),2) Category ,
       PARSENAME(REPLACE(Name,',','.'),3) SubCategory
from @temp

这是可能的,但这是非常糟糕的设计。使用这种格式,您的头疼问题只会进一步增加。首先,我们需要查看本专栏中的一些示例数据。请注意,示例数据必须涵盖您专栏中所有不同的可能数据分隔场景,以确保我们从正确的方式开始。产品名称、类别和子类别是否以某种方式分隔?像逗号还是制表符?如果这三个值以某种方式分隔,您可以编写自己的拆分函数来分隔它们001-00-0000此Id表示类别,001-01-0000此Id表示子类别,001-01-0001此Id表示产品名称。在这种情况下,您只需要使用自己的拆分函数拆分仪表板上的字段
SELECT SUBSTRING([Name], 0, CHARINDEX('-', [Name])) As ProductName,
SUBSTRING(
SUBSTRING([Name], CHARINDEX('-', [Name]) +1, LEN([Name])),
 0,
CHARINDEX('-',SUBSTRING([Name], CHARINDEX('-', [Name]) +1, LEN([Name])))
) As ProdCat,
SUBSTRING(
SUBSTRING([Name], CHARINDEX('-', [Name]) +1, LEN([Name])),
CHARINDEX('-',SUBSTRING([Name], CHARINDEX('-', [Name]) +1, LEN([Name])))+1,
LEN([Name])-CHARINDEX('-',SUBSTRING([Name], CHARINDEX('-', [Name]) +1, LEN([Name])))
) As ProdSubCat
FROM dbo.ItemsDefination