Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-GROUPBY-合并列';将值放在一行中?_Sql_Sql Server_Sql Server 2016_Ssms 2016 - Fatal编程技术网

SQL-GROUPBY-合并列';将值放在一行中?

SQL-GROUPBY-合并列';将值放在一行中?,sql,sql-server,sql-server-2016,ssms-2016,Sql,Sql Server,Sql Server 2016,Ssms 2016,(在SSMS2016工作)我的表格如下: | ORDER_NUMBER | ITEM_CAT| ORDER_QTY | UNALLOCATED| |--------------|---------|-----------|------------| | 1 | FLAT | 2 | 1 | | 1 | HANG | 1 | 1 | | 1 | SHOE

(在SSMS2016工作)我的表格如下:

| ORDER_NUMBER | ITEM_CAT| ORDER_QTY | UNALLOCATED|
|--------------|---------|-----------|------------|
|  1           | FLAT    | 2         | 1          |
|  1           | HANG    | 1         | 1          |
|  1           | SHOE    | 2         | 1          |
|  2           | FLAT    | 1         | 1          |
|  2           | FLAT    | 1         | 1          |
|  3           | SHOE    | 1         | 1          |
|  3           | SHOE    | 1         | 1          |
|  3           | SHOE    | 1         | 1          |
|  4           | FLAT    | 1         | 1          |
|  4           | SHOE    | 1         | 1          |
|  4           | FLAT    | 1         | 1          |
|  4           | SHOE    | 1         | 1          |
如果我这样做

SELECT ORDER_NUMBER, ITEM_CAT, SUM(ORDER_QTY) AS 'ORDER_QTY', SUM(UNALLOCATED) AS 'UNALLOCATED' 
FROM TABLEA 
GROUP BY ORDER_NUMBER, ITEM_CAT
我得到以下信息:

| ORDER_NUMBER | ITEM_CAT| ORDER_QTY | UNALLOCATED|
|--------------|---------|-----------|------------|
|  1           | FLAT    | 2         | 1          |
|  1           | HANG    | 1         | 1          |
|  1           | SHOE    | 2         | 1          |
|  2           | FLAT    | 2         | 2          |
|  3           | SHOE    | 3         | 3          |
|  4           | FLAT    | 2         | 2          |
|  4           | SHOE    | 2         | 2          |
理想情况下,我希望每个订单号只获得一行,并在同一行中列出唯一的ITEM_CAT值,如下所示:

| ORDER_NUMBER | ITEM_CAT             | ORDER_QTY | UNALLOCATED|
|--------------|----------------------|-----------|------------|
|  1           | FLAT / HANG / SHOE   | 5         | 3          |
|  2           | FLAT                 | 2         | 2          |
|  3           | SHOE                 | 3         | 3          |
|  4           | FLAT / SHOE          | 4         | 4          |
这是否容易做到


谢谢。

如果您使用的是SQL Server 2016,您可以使用
string\u agg()


如果您使用的是SQL Server 2016,则可以使用
string\u agg()


虽然这可能是某个问题的重复,但它不是建议问题的重复。自SQL Server 2005以来,SQL Server的功能已发生更改,导致该解决方案过时。尽管这可能是某些问题的重复,但它不是建议的问题的重复。自SQL Server 2005以来,SQL Server的功能发生了变化,使该解决方案过时。非常感谢。我认为string_agg()是在2017年添加的(或者可能是2016年的更高版本),所以很遗憾我不能使用它。然而,它确实让我找到了“XML路径的东西”,经过一番尝试和错误,我终于得到了我所需要的东西。非常感谢。我认为string_agg()是在2017年添加的(或者可能是2016年的更高版本),所以很遗憾我不能使用它。然而,它确实让我找到了“XML路径的东西”,经过一点尝试和错误,我成功地得到了我所需要的东西。
SELECT ORDER_NUMBER,
       STRING_AGG(ITEM_CAT, ' / ') as ITEM_CATS,
       SUM(ORDER_QTY) AS ORDER_QTY, 
       SUM(UNALLOCATED) AS UNALLOCATED
FROM (SELECT ORDER_NUMBER, ITEM_CAT, SUM(ORDER_QTY) AS ORDER_QTY,
             SUM(UNALLOCATED) AS UNALLOCATED
      FROM TABLEA
      GROUP BY ORDER_NUMBER, ITEM_CAT
     ) a
GROUP BY ORDER_NUMBER;