sql - 需要一些帮助来解决 SQL 分组问题

标签 sql sql-server t-sql

我就直接切入正题了。我目前已将较大的表格缩小为如下所示:

 Key    Group    Data1    Data2    Data3
=====  =======  =======  =======  =======
 AAA     A         1        0        0
 ASD     A         1        1        0
 FSD     A         1        0        1
 BAS     A         1        1        1
 CDR     B         1        1        1
 KLW     B         1        0        1

以下是创建和填充它的代码:

CREATE TABLE #DataGroups
(
    [Key]   VARCHAR(25),
    [Group] VARCHAR(25),
    [Data1] BIT,
    [Data2] BIT,
    [Data3] BIT
)

INSERT INTO #DataGroups VALUES
('AAA', 'A', 1, 0, 0),
('ASD', 'A', 1, 1, 0),
('FSD', 'A', 1, 0, 1),
('BAS', 'A', 1, 1, 1),
('CDR', 'B', 1, 1, 1),
('KLW', 'B', 1, 0, 1)

约束如下:

  • “ key ”是唯一的
  • ('Group', 'Data1', 'Data2', 'Data3') 是唯一的
  • 'Data1' 将始终为 1(但是我不知道这是否与解决方案相关,我们可以假设它可能并不总是为 1)

我需要做的是制定一个查询,以以下方式重新排列数据:

 Group     Data1     Data12    Data13    Data123
=======  ========  =========  ========  =========
   A        AAA       ASD        FSD       BAS
   B        NULL      NULL       KLW       CDR

根据此表,我需要根据每个组的数据值获取 key 。因此,对于数据 1 列,我需要获取组中 Data1 = 1、Data2 = 0 和 Data3 = 0 的键。如果这没有意义,请告诉我是否应该澄清。

我对 SQL 不太有经验,所以我更喜欢尽可能干净的解决方案。我知道,由于我要将行数据转换为列,所以我很可能需要使用 PIVOT,但我不完全确定。即使对我需要使用什么类型的函数/聚合来解决这个问题提供一点帮助,我也会非常感激。

抱歉,我已经尝试提出自己的解决方案来尝试开始使用 PIVOT,但我似乎无法找到一个接近我想要的解决方案。

最佳答案

你似乎想要这样的东西:

select group,
       max(case when data1 = 1 and data2 = 0 and data3 = 0 then key end) as data1,
       max(case when data1 = 1 and data2 = 1 and data3 = 0 then key end) as data12,
       max(case when data1 = 1 and data2 = 0 and data3 = 1 then key end) as data13,
       max(case when data1 = 1 and data2 = 1 and data3 = 1 then key end) as data123
from #DataGroups dg
group by group

关于sql - 需要一些帮助来解决 SQL 分组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53414559/

相关文章:

将数据从一列映射到另一列的 SQL 命令

sql-server - 一对多返回单行

sql - 我如何编写一个sql查询来查找其中一列是另一列的子字符串的行

sql-server - 如何加入到 "Other"行

c# - 什么代表sql server中的double?

sql-server - 如何从节点获取值(value)? SQL Server XML dml

PHP 语法 |在数组中使用变量

mysql - 为什么 CAST() 函数返回错误的日期?

sql - 在所有其他值之后对空值进行排序,特殊情况除外

c# - 如何将 "NULL/DbNull"发送到数据类型为 : nullable int 的表列中