首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >串连和脱哑铃多行

串连和脱哑铃多行
EN

Stack Overflow用户
提问于 2017-03-21 08:43:28
回答 2查看 83关注 0票数 0

我有以下格式的一些传入行。

代码语言:javascript
复制
| Col1 | Col2 | Col3 |
| 1    | A    | 1    |
| 1    | A    | 1,2  |
| 1    | A    | 1,3  |
| 1    | A    | 2,4  |

期望输出

代码语言:javascript
复制
| Col1 | Col2 | Col3    |
| 1    | A    | 1,2,3,4 |

基本上,基于Col1和Col2对所有行进行分组,然后从Col3中连接和删除重复的行。

代码语言:javascript
复制
SELECT COL1, COL2, {?????}
FROM TABLEA
GROUP BY COL1, COL2;

此刻我想不了太多。任何指示都将不胜感激。我倾向于使用WX2数据库,但是任何符合ANSI的代码段都会有帮助。

EN

回答 2

Stack Overflow用户

发布于 2017-03-21 09:15:34

对于Server:首先,使用col3方法连接所有的CTE值,并在这个CTE表上插入到table.Based中,将所有行作为单独的列分割成单个列,基于CTE table.Finally在with的帮助下将所有不同的字符串连接起来。

代码语言:javascript
复制
 CREATE TABLE #table ( Col1 INT ,   Col2 VARCHAR(10) , Col3 VARCHAR(10))
 INSERT INTO #table ( Col1  ,   Col2  , Col3 )
 SELECT  1   , 'A'   , '1'  UNION ALL 
 SELECT  1   , 'A'   , '1,2' UNION ALL
 SELECT  1   , 'A'   , '1,3'  UNION ALL
 SELECT  1   , 'A'   , '2,4' 

 ;WITH CTEValues ( Colval ) AS
 (
   SELECT STUFF ( ( SELECT ',' +  Col3 FROM #table T2 WHERE T2.Col2 =  
                T1.col2 FOR XML PATH('') ),1,1,'') 
   FROM #table T1 
   GROUP BY Col2
 )

 SELECT * INTO #CTEValues
 FROM CTEValues

 ;WITH CTEDistinct ( SplitValues , SplitRemain ) AS
 (
  SELECT SUBSTRING(Colval,0,CHARINDEX(',',Colval)),    
         SUBSTRING(Colval,CHARINDEX(',',Colval)+1,LEN(Colval))
  FROM #CTEValues
  UNION ALL
  SELECT CASE WHEN CHARINDEX(',',SplitRemain) = 0 THEN SplitRemain ELSE  
                   SUBSTRING(SplitRemain,0,CHARINDEX(',',SplitRemain)) END, 
         CASE WHEN CHARINDEX(',',SplitRemain) = 0 THEN '' ELSE                               
        SUBSTRING(SplitRemain,CHARINDEX(',',SplitRemain)+1,LEN(SplitRemain))          
        END
  FROM CTEDistinct
  WHERE SplitRemain <> ''
 )

  SELECT STUFF ( ( SELECT DISTINCT ',' +  SplitValues FROM CTEDistinct T2  
  FOR XML PATH('') ),1,1,'') 
票数 0
EN

Stack Overflow用户

发布于 2017-03-21 09:27:03

您可以尝试转置或连接函数。困难来自于这样一个事实: col3是varchar,需要转换才能得到不同的值。使用MySQL:

代码语言:javascript
复制
SELECT col1, col2, GROUP_CONCAT(DISTINCT col3) AS col3 FROM
(SELECT col1, col2, CONVERT(SUBSTR(col3, 1), UNSIGNED INTEGER) AS col3 FROM (
SELECT 1 AS col1, 'A' AS col2, '1' AS col3 UNION ALL
SELECT 1 AS col1, 'A' AS col2, '1,2' AS col3 UNION ALL
SELECT 1 AS col1, 'A' AS col2, '1,3' AS col3 UNION ALL  
SELECT 1 AS col1, 'A' AS col2, '2,4' AS col3
) AS t
UNION ALL
SELECT col1, col2, CONVERT(SUBSTR(col3, 3), UNSIGNED INTEGER) AS col3 FROM (
SELECT 1 AS col1, 'A' AS col2, '1' AS col3 UNION ALL
SELECT 1 AS col1, 'A' AS col2, '1,2' AS col3 UNION ALL
SELECT 1 AS col1, 'A' AS col2, '1,3' AS col3 UNION ALL  
SELECT 1 AS col1, 'A' AS col2, '2,4' AS col3
) AS t1
) AS t2
WHERE col3 <> 0

结果:

代码语言:javascript
复制
col1 | col2 | col3 
1    |   A  | 1,2,3,4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42922071

复制
相关文章

相似问题

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