【发布时间】:2020-10-01 17:02:41
【问题描述】:
备注:我的例子过于简化了。实际上,我正在处理一个巨大的查询。但是为了说明问题/错误,让我们求助于苹果和橙子。
我的原始查询如下所示:
SELECT 'FruitsCount' AS "Type", (SELECT count(id) as Counter, [Name] FROM Fruits group by name FOR JSON PATH) AS "Value"
这会导致类似的结果。我们将其称为Format A
|---------------------|------------------------------------------------------------------------------|
| Type | Value |
|---------------------|------------------------------------------------------------------------------|
| FruitCount | [{"Counter":2, "Name":"Apple"},{"Counter":3, "Name":"Orange"}] |
|---------------------|------------------------------------------------------------------------------|
但是,现在我想创建水果和蔬菜计数的联合。我的查询现在看起来像这样
(SELECT count(id) as Counter, [Name] FROM Fruits group by name
UNION
SELECT count(id) as Counter, [Name] FROM Vegetables group by name)
FOR JSON PATH
|---------------------|------------------------------------------------------------------------------|
| JSON_F52E2B61-18A1-11d1-B105-00805F49916B |
|---------------------|------------------------------------------------------------------------------|
| [{"Counter":2, "Name":"Apple"},{"Counter":3, "Name":"Orange"},{"Counter":7, "Name":"Tomato"}] |
|---------------------|------------------------------------------------------------------------------|
但是,我希望它采用以前的格式,其中我有一个类型和值列(格式 A)。
我尝试了以下操作:
SELECT 'FruitsCount' AS "Type", ((SELECT count(id) as Counter, [Name] FROM Fruits group by name
UNION
SELECT count(id) as Counter, [Name] FROM Vegetables group by name) FOR JSON PATH) as "Value"
但是,我收到了Error 156: Incorrect syntax near the keyword 'FOR'.
然后我尝试了以下方法:
SELECT 'FruitsAndVegCount' AS "Type", (SELECT count(id) as Counter, [Name] FROM Fruits group by name
UNION
SELECT count(id) as Counter, [Name] FROM Vegetables group by name FOR JSON PATH) as "Value"
但是,我收到了Error 1086: The FOR XML and FOR JSON clauses are invalid in views, inline functions, derived tables, and subqueries when they contain a set operator.
我一直试图让我的“联合化”查询采用格式 A。
更新 1:这是所需的输出
|---------------------|------------------------------------------------------------------------------------------------|
| Type | Value |
|---------------------|------------------------------------------------------------------------------------------------|
| FruitAndVegCount | [{"Counter":2, "Name":"Apple"},{"Counter":3, "Name":"Orange"},{"Counter":7, "Name":"Tomato"}] |
|---------------------|------------------------------------------------------------------------------------------------|
目标是只有一行,有 2 列(类型、值),其中类型是我指定的任何内容(即 FruitAndVegCount),值是由联合查询创建的 ResultSet 的 JSON。
【问题讨论】:
标签: sql-server database tsql union