【发布时间】:2019-07-10 08:18:49
【问题描述】:
我有一个连接多个表的查询。结果我有几个字段,但我需要将其中一个字段连接到字符串中的其他字段的内容进行分组。
查询结果如下表:
* query result
+-----------+-------------+
| element | option |
+-----------+-------------+
| 25 | foo 2 |
| 25 | bar 1 |
| 25 | baz 1 |
| 30 | foo 2 |
| 30 | baz 5 |
| 32 | baz 1 |
+-----------+-------------+
我以前用GROUP_CONCAT做过类似的事情,像这样:
SELECT
result.element,
GROUP_CONCAT(result.options SEPARATOR ', ') AS 'options'
FROM (
-- place here an sql query with joins and some calculated fields --
) AS result
GROUP BY result.element
而且它通常可以工作,但是我现在要做这个查询的sql server似乎不支持GROUP_CONCAT。
sql server 版本是 Microsoft SQL Server 2014 (SP2-CU8) (KB4037356) - 12.0.5557.0 (X64) Standard Edition (64-bit) on Windows NT 6.3 (Build 9600:) (Hypervisor)
我最终需要的是这样的:
* final result
+-----------+-----------------------------+
| element | option |
+-----------+-----------------------------+
| 25 | foo 2, bar 1, baz 1 |
| 30 | foo 2, baz 5 |
| 32 | baz 1 |
+-----------+-----------------------------+
我进行了很多搜索,并找到了一种直接从表中执行此操作的方法,而不是从另一个查询结果中。怎么做?
编辑:请记住,我必须从查询结果而不是表中执行 xml 路径。我了解如何从表中使用它,但我不了解如何使用查询结果中的 xml 路径。
如果我使用类似的东西:
SELECT
result.element,
( SELECT STUFF((SELECT ',' + options
FROM result T2
WHERE T2.element= result.element
ORDER BY element
FOR XML PATH('')), 1, 1, '') )AS 'options'
FROM (
SELECT
st.element AS 'element',
CONCAT(st.salesoriginid, ' ', COUNT(st.salesoriginid)) AS 'options'
FROM SALESTABLE AS st WITH (NOLOCK)
LEFT JOIN SALESLINE AS sl WITH (NOLOCK) ON sl.SALESID = st.SALESID AND sl.DATAAREAID = st.DATAAREAID
LEFT JOIN INVENTDIM AS idim WITH (NOLOCK) ON idim.INVENTDIMID = sl.INVENTDIMID AND idim.DATAAREAID = sl.DATAAREAID
WHERE st.salestype = 3
AND st.salesoriginid IS NOT NULL
AND st.salesoriginid != ''
GROUP BY st.element, st.salesoriginid
) AS result
GROUP BY result.element
然后我得到错误:
Invalid object name 'result' [SQL State=S0002, DB Errorcode=208]
【问题讨论】:
-
SQL Server 不支持
GROUP_CONCAT。请参阅here 了解替代方案。 -
sql server 版本?
-
"but not from another query result"这是什么意思?你能在你的问题中显示样本吗
标签: sql sql-server sql-server-2014