首页
学习
活动
专区
圈层
工具
发布

SQL乘积
EN

Stack Overflow用户
提问于 2016-11-08 13:44:48
回答 1查看 60关注 0票数 1

使用SQL server 2012和office 365 excel;表中有以下示例数据:

示例:

代码语言:javascript
复制
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代码

代码语言:javascript
复制
=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 (产品)的状态。

代码语言:javascript
复制
|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行相同的代码,不同的类别。我需要把它变成一排

代码语言:javascript
复制
| TC TSPM|     67 |  3000 |     76 | Traditional Cornice Pumice Plain Shaker | Cornice___1959;Cornice___1967;Cornice___1968;

在这一点上,我不知道我还能进一步澄清这个问题多少。如果您需要更多的信息,我将尝试并提供。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 15:25:41

第一次尝试修剪部分:

SQL演示

代码语言:javascript
复制
SELECT [pd_code], [Height], [width], [length], [pd_catDesc],
       REVERSE(LEFT(reverse(category), charIndex(' >>', reverse(category)) -1 )) as [category]
FROM PRODUCT;

输出

使用GROUP_CONCAT:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40488505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档