【问题标题】:Having problems with writing sql query on SQL Server 2008 [closed]在 SQL Server 2008 上编写 sql 查询时遇到问题 [关闭]
【发布时间】:2013-01-17 08:33:30
【问题描述】:

我有这张桌子

1   a   d
1   a   e
2   b   f
2   b   g
3   c   h
3   c   i
3   c   j
3   c   k

我想要这个结果

1   a   d,e
2   b   f,g
3   c   h,I,j,k,l

【问题讨论】:

  • 这看起来像是一个真实的问题吗?
  • 你到底有哪些栏目? “1 a d,e”是一列,三列还是四列?

标签: mysql sql sql-server-2008 tsql


【解决方案1】:

AFAIK,SQL-Server 没有内置的方法这样做,但您可以使用 FOR XML 这样做:

SELECT 
  t1.col1,
  t1.col2,
  STUFF((
    SELECT ', ' + t2.col3
    FROM Table1 t2
    WHERE t2.col1 = t1.col1
    FOR XML PATH (''))
  ,1,2,'') AS Groups
FROM Table1 t1
GROUP BY t1.col1, col2;

这会给你:

| COL1 | COL2 |     GROUPS |
----------------------------
|    1 |    a |       d, e |
|    2 |    b |       f, g |
|    3 |    c | h, i, j, k |

SQL Server fiddle demo

然而,MySQL有一个内置函数GROUP_CONCAT()

SELECT
  col1, col2, GROUP_CONCAT( col3 SEPARATOR ',') groups
FROM Table1
GROUP BY col1, col2;

Mysql Fiddle Demo

【讨论】:

  • 也许你的意思是SELECT col1, MAX(col2), GROUP_CONCAT(col3 SEPARATOR ',') groups
  • @JW。抱歉,我错过了,示例数据的格式不正确,我没有看到,我认为SELECT col1, col2, GROUP_CONCAT of the col3 GROUP BY col1, col2 就足够了。谢谢。
  • 格式化没问题我已经在您的查询的帮助下解决了这个问题。谢谢你很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 2020-08-13
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多