使用SQL server 2012和office 365 excel;表中有以下示例数据:
示例:
pd_code, height, width, length, pd_catdesc, Category
derp , 1 , 1 , 1 , derp desc , cattop>>catmain>>catsub___18当我从我的表中选择时,总行数是10976行,如果我按所有其他列取类别和组,则得到10691行(正确的唯一部分)。
原因
一个产品可以有一个以上的类别。我面临的问题是一个重要的问题。一个产品有一个定义为.
category___18;
如果我想要添加多个,我只需要添加一个分号
category___18;category___20;
从数据你可以看到,我的类别字段实际上是树,我有一些excel代码,把我从所有的子类别。Excel代码
=TRIM(RIGHT(SUBSTITUTE(CR3,">>",REPT(" ",250)),250))category___18;
我需要什么
我需要对数据做的是过滤掉那些多类别的产品。所以我可以批量进口单一类别的产品。
然后,我需要执行一个新的查询,它将以某种方式获取产品的所有子类别,并创建一个字符串,如
category___18;category___20;
摘要
因此,我只需要基于pd_code返回唯一的行,但是包含一个列,该列将显示一个子类别,如
cat___18;
任何其他类别如
cat___18;cat___19;
进一步澄清
我需要一个SQL查询,它将产生一个名为“分类精炼”的新列--例如,这个查询需要查看2行是否相同(除了类别字段),然后按照解释将类别合并到新列中。(请注意excel示例中的trim方法)
为特定用户提供更多的澄清和数据:
下面的数据是快速选择*从表中筛选1 pd_code (产品)的状态。
|pd_code | Height | width | length | pd_catDesc | category
+----------------------------------------------------------------------------
| TC TSPM| 67 | 3000 | 76 | Traditional Cornice Pumice Plain Shaker | Kitchens >> Front Matching Features >> Front Matching Features >> Traditional Cornice___1959 |
| TC TSPM| 67 | 3000 | 76 | Traditional Cornice Pumice Plain Shaker | Kitchens >> Front Matching Features >> Front Matching Features >> Traditional Cornice___1967 |
| TC TSPM| 67 | 3000 | 76 | Traditional Cornice Pumice Plain Shaker | Kitchens >> Front Matching Features >> Front Matching Features >> Traditional Cornice___1968 |因此,正如您在上面看到的,3行相同的代码,不同的类别。我需要把它变成一排
| TC TSPM| 67 | 3000 | 76 | Traditional Cornice Pumice Plain Shaker | Cornice___1959;Cornice___1967;Cornice___1968;在这一点上,我不知道我还能进一步澄清这个问题多少。如果您需要更多的信息,我将尝试并提供。
发布于 2016-11-08 15:25:41
第一次尝试修剪部分:
SQL演示
SELECT [pd_code], [Height], [width], [length], [pd_catDesc],
REVERSE(LEFT(reverse(category), charIndex(' >>', reverse(category)) -1 )) as [category]
FROM PRODUCT;输出

使用GROUP_CONCAT:
WITH trim_cat as (
SELECT [pd_code], [Height], [width], [length], [pd_catDesc],
REVERSE(LEFT(reverse(category), charIndex(' >>', reverse(category)) -1 )) as [category]
FROM PRODUCT
)
SELECT DISTINCT
[pd_code], [Height], [width], [length], [pd_catDesc],
[category] = (
SELECT tc.[category] + ' ; '
FROM trim_cat tc
WHERE tc.[pd_code] = t.[pd_code]
FOR XML PATH('')
)
FROM trim_cat t

https://stackoverflow.com/questions/40488505
复制相似问题