当存在具有唯一数据的列时如何分组 (SQL Server)

马修

我正在尝试将一组在 SQL Server 中具有唯一列的行组合在一起。

目前所有的数据都被选择为一个标准的二维表,正在排序是 Javascript,但是,由于 JSON 非常大,对于大型列表来说非常慢。

我希望通过在服务器端转换数据集来提高前端性能,以便 DOM 渲染得更快。

我认为这可以通过 SQLgroup by函数的某种组合来实现,并可能结合一些较openjson新版本的 SQL Server等较新的功能

示例表

| a | b | c | uniqueColumn  |
|---|---|---|---------------|
| 1 | 2 | 3 | string1       |
| 1 | 2 | 3 | string2       |
| 4 | 5 | 6 | string3       |

示例选择

select
uniqueColumn
group by 
a,
b,
c

期望输出

| uniqueSelection1 | uniqueSelection2 |
|------------------|------------------|
| string1          | string3          |
| string2          |                  |

a-b-c当数据集的一部分是唯一的时,如何将每个唯一的组合分组到自己的集合中?

内维尔

要使用 N 列获得上述所需结果的输出N,唯一a,b,c的数量在哪里将很困难。您在应用程序端的处理速度可能比在 SQL Server 端编写和执行动态数据透视表所需的速度更快。


相反,如果您有更新的 SQL Server,使用该FOR JSON AUTO功能可能会有所帮助,即使它与您想要的输出不完全一样:

SELECT DISTINCT (
        SELECT uniqueColumn
        FROM yourtable
        WHERE a = t.a
            AND b = t.b
            AND c = t.c
        FOR JSON AUTO
        ) AS e
FROM yourtable t;

举个例子:

CREATE TABLE test (a int, b int, c int, d varchar(30));
INSERT INTO test VALUES (1,2,3,'string1');
INSERT INTO test VALUES (1,2,3,'string2');
INSERT INTO test VALUES (4,5,6,'string3');
SELECT DISTINCT (SELECT d FROM test WHERE a=t.a AND b=t.b AND c=t.c FOR JSON AUTO) as e FROM test t;

+-----------------------------------+
|                 e                 |
+-----------------------------------+
| [{"d":"string1"},{"d":"string2"}] |
| [{"d":"string3"}]                 |
+-----------------------------------+

SQLFiddle 示例


如果您想通过a,b,c导致此输出的独特选择,您可以执行以下操作:

SELECT DISTINCT a,b,c, 
(SELECT d FROM test WHERE a=t.a AND b=t.b AND c=t.c FOR JSON AUTO) as e 
FROM test t
FOR JSON AUTO;

[{"a":1,"b":2,"c":3,"e":[{"d":"string1"},{"d":"string2"}]},{"a":4,"b":5,"c":6,"e":[{"d":"string3"}]}]

SQLFiddle 示例

或者有一个表和 json 的混合结果:

SELECT DISTINCT a,b,c, 
(SELECT d FROM test WHERE a=t.a AND b=t.b AND c=t.c 
FOR JSON AUTO) as e 
FROM test t;


+---+---+---+-----------------------------------+
| a | b | c |                 e                 |
+---+---+---+-----------------------------------+
| 1 | 2 | 3 | [{"d":"string1"},{"d":"string2"}] |
| 4 | 5 | 6 | [{"d":"string3"}]                 |
+---+---+---+-----------------------------------+

SQLFiddle 示例


FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER如果您想d从 json 数组中释放这些输出,也可以使用您在最后一个查询上的输出将是

[{"a":1,"b":2,"c":3,"e":"{\"d\":\"string1\"},{\"d\":\"string2\"}"},{"a":4,"b":5,"c":6,"e":"{\"d\":\"string3\"}"}]

快速解释正在发生的事情:

本质上,对于d列(您的 uniqueString)的这个子查询,我们正在做类似的事情:

SELECT a,b,c,AGGREGATE_IN_JSON(d) FROM yourtable GORUP BY a,b,c; 

只是语法要求我们AGGREGATE_IN_JSON在子查询中执行该组成的公式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL Server:如何在新列具有多个唯一值的地方进行数据透视

如何在 SQL-Server 中创建具有两列的唯一键

如何将行添加到具有唯一标识符类型列的 SQL Server 表?

SQL Server 2012:更新具有唯一编号的行

当数据具有NULL值时,如何在SQL Server中使用数据透视表将多行转换为多列的一行

SQL Server 2012:如何在同一数据集中使用基于公式的列创建计算列?

如何在SQL查询中使用GROUP BY Clasuse显示具有多个值的唯一数据?

如何从SQL Server中的特定列获取唯一值?

如何创建SQL Server数据库列的唯一组合

SQL Server:按所有列分组

SQL Server - 分组到一列

sql server汇总或分组数据

如何按列分组 - SQL Server

SQL Server:将具有各种数据的列拆分为按ID分组的3个特定列

SQL Server-是否需要创建具有唯一约束的索引作为列之一?

与SQL Server的尴尬分组

SQL Server多个分组

SQL Server分组依据?

如何在“具有子句”中使用列选择,而不在SQL Server中的“按子句分组”中使用列选择

在SQL Server中返回没有分组依据的非唯一行

我的SQL Server表仅由3列组成,具有唯一索引。索引应该聚类吗?

SQL Server搜索具有一个值的不同数据类型的多列

将具有动态数据的多列转换为一个-SQL Server

在sql列中查找唯一数据的总和

SQL Server:将具有相似列值的行分组为一行,然后将相应的行求和

如何透视具有多个列值的SQL Server表?

如何从具有不同节点的XML中获取数据作为SQL Server中的列

如何在SQL查询中获取唯一数据?

SQL Server数据透视