sql - SQL Server 查询与按字段错误分组
问题描述
我有下表MyTable
:
id │ value_two │ value_three │ value_four
────┼───────────┼─────────────┼────────────
1 │ a │ A │ AA
2 │ a │ A2 │ AA2
3 │ b │ A3 │ AA3
4 │ a │ A4 │ AA4
5 │ b │ A5 │ AA5
我想查询按 .{ value_three, value_four }
分组的对象数组value_two
。value_two
应该单独出现在结果中。结果应如下所示:
value_two │ value_four
───────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
a │ [{"value_three":"A","value_four":"AA"}, {"value_three":"A2","value_four":"AA2"}, {"value_three":"A4","value_four":"AA4"}]
b │ [{"value_three":"A3","value_four":"AA3"}, {"value_three":"A5","value_four":"AA5"}]
在 postgress 我可以这样做:
SELECT value_two
, json_agg(row_to_json((value_three, value_four)::foo)) AS value_four
FROM mytable
GROUP BY value_two
但在 SQL SERVER 我得到'json_array_elements' is not a recognized built-in function name.
在 SQL SERVER 上与此等效的是什么。有人能帮助我吗?
解决方案
如果您使用的是 SQL Server 2016+,您可以尝试使用FOR JSON
:
桌子:
SELECT *
INTO Data
FROM (VALUES
(1, 'a', 'A', 'AA'),
(2, 'a', 'A2', 'AA2'),
(3, 'b', 'A3', 'AA3'),
(4, 'a', 'A4', 'AA4'),
(5, 'b', 'A5', 'AA5')
) v (id, value_two, value_three, value_four)
陈述:
SELECT DISTINCT d.value_two, j.value_four
FROM Data d
OUTER APPLY (
SELECT value_three, value_four
FROM Data
WHERE value_two = d.value_two
FOR JSON AUTO
) j (value_four)
结果:
value_two value_four
a [{"value_three":"A","value_four":"AA"},{"value_three":"A2","value_four":"AA2"},{"value_three":"A4","value_four":"AA4"}]
b [{"value_three":"A3","value_four":"AA3"},{"value_three":"A5","value_four":"AA5"}]
推荐阅读
- linux - 我正在尝试在 ubuntu 中打开一个 excel 文件,但它显示垃圾字符
- google-cloud-firestore - 我无法从控制台删除云 Firestore 中的集合
- php - 获取 php 按钮值并在不同页面上使用
- node.js - React + Express 无法获取 /login
- javascript - 用户登录后如何更改初始屏幕?
- r - 是否有关于如何在 R 中设置自己的方括号函数的文献?
- javascript - 检查锚点是否具有特定的 url 与 jQuery 没有重复
- for-loop - 在 VHDL 中,是否可以在 FOR 循环中使用 i,j 以外的变量进行综合?
- javascript - 如何知道何时手动(写入)更改了 url 哈希?
- docker - Hyperledger Fabric:了解 Docker 容器