sql - SQL group by 连接查询结果的字符串
问题描述
我有一个连接多个表的查询。结果我有几个字段,但我需要按其中一个将其他字段的内容连接到字符串中进行分组。
查询结果如下表:
* 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]
解决方案
你可以使用东西
Select Distinct element, (
SELECT STUFF((SELECT ',' +option
FROM #T T2
Where T2.element = T1.element
ORDER BY element
FOR XML PATH('')), 1, 1, '') )AS [Options]
From #T T1
推荐阅读
- javascript - 如何将两个数组与 ES6 中的类型和键值合并
- python - python 3中没有空格的金字塔打印
- c++ - C++ 编译器优化(MSYS2 MinGW-64 位 GCC 编译器与 VSCode 一起使用)
- python - 如何在python数据框中不等于
- python - 海龟模块不打开窗口
- c# - WireMock 查询参数:使用正则表达式匹配包含等号 ("=") 符号的值
- python - Pandas Dataframe 时间序列重新采样,如何修改 bin 以适应底层数据集的开始和结束时间
- python - 遍历将所有 PDF 转换为图像的文件夹
- android - 取消选项后 Android 11 相机无法正常工作
- django - 如何根据从 Django 中的表单请求传递的 ID 使用 JSONSchemaField 创建动态表单?