Sql server SQL management studio中的SQL联接查询
我在一个数据库表dbo.ItemDefinition中有一列,列名是dbo.ItemDefinition.name。此列包含我需要分别提取的三个值—产品名称、类别和子类别。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
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