如何基于对列的单个比较将sql表数据从多行转换为仅一行

埃德加姆策

我有了一个表12行的代表在某一个月,该表的结构具有代表月份的数字,所以公司的款项给定的公司January = [1]February = [2]等等。

CREATE TABLE [dbo].[TblMonths](
    [Uid] int not null IDENTITY Primary KEY,
    [Id] [float] NULL,
    [Company] [nvarchar](255) NULL,
    [Days] [float] NULL,
    [Pay] [float] NULL,
    [1] [float] NULL,
    [2] [float] NULL,
    [3] [float] NULL,
    [4] [float] NULL,
    [5] [float] NULL,
    [6] [float] NULL,
    [7] [float] NULL,
    [8] [float] NULL,
    [9] [float] NULL,
    [10] [float] NULL,
    [11] [float] NULL,
    [12] [float] NULL
) ;

insert into [TblMonths] values
(2, 'COMPANY_A',    17,     3   ,0, 0   ,51,0   ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(2, 'COMPANY_A',    18.6,   3   ,0, 0   ,0, 0   ,0, 0   ,56 ,0, 0   ,0, 0,  0),
(2, 'COMPANY_A',    19.2,   5   ,0, 0   ,0, 0   ,0, 0   ,0  ,0, 96  ,0, 0,  0),
(2, 'COMPANY_A',    19.75,  4   ,0, 0   ,0, 0   ,79,0   ,0  ,0, 0   ,0, 0,  0),
(2, 'COMPANY_A',    20,     2   ,0, 0   ,0, 40  ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(2, 'COMPANY_A',    22.5,   2   ,0, 0   ,0, 0   ,0, 0   ,0  ,0, 0   ,0,45,  0),
(2, 'COMPANY_A',    23.5,   2   ,47,0   ,0, 0   ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(2, 'COMPANY_A',    25,     2   ,0, 0   ,0, 0   ,0, 0   ,0  ,0, 0   ,0, 0,  50),
(2, 'COMPANY_A',    26,     2   ,0, 52  ,0, 0   ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(2, 'COMPANY_A',    26.6,   3   ,0, 0   ,0, 0   ,0, 0   ,0  ,80,0   ,0, 0,  0),
(2, 'COMPANY_A',    28.5,   2   ,0, 0   ,0, 0   ,0, 0   ,0  ,0, 0   ,57,0,  0),
(2, 'COMPANY_A',    29.3,   3   ,0, 0   ,0, 0   ,0, 88  ,0  ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    13.8,   5   ,0, 0   ,69,0   ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    15,     2   ,0, 0   ,0, 0   ,0, 0   ,30 ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    16,     1   ,0, 0   ,0, 0   ,0, 0   ,0  ,0, 0   ,0,16,  0),
(3, 'COMPANY_B',    20,     3   ,0, 0   ,0, 0   ,0, 0   ,0  ,60,0   ,0, 0,  0),
(3, 'COMPANY_B',    20,     4   ,0, 0   ,0, 0   ,0, 0   ,0  ,0, 0   ,0, 0,  80),
(3, 'COMPANY_B',    20.5,   2   ,0, 0   ,0, 41  ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    23.25,  4   ,0, 0   ,0, 0   ,0, 0   ,0  ,0,93   ,0, 0,  0),
(3, 'COMPANY_B',    23.3,   3   ,0, 0   ,0, 0   ,70,0   ,0  ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    23.5,   2   ,47,0   ,0, 0   ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    28,     1   ,0, 28  ,0, 0   ,0, 0   ,0  ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    29,     3   ,0, 0   ,0, 0   ,0, 87  ,0  ,0, 0   ,0, 0,  0),
(3, 'COMPANY_B',    29.3,   3   ,0, 0   ,0, 0   ,0, 0   ,0  ,0, 0   ,88,0,  0);

我想将每个Company_X 的所有12转换为仅1当月份列的值不同于..."Days"0

ID  COMPANY     JAN     FEB     MAR     APR     MAR     JUN     JUL     AGO     SEP     OCT     NOV     DEC
2   COMPANY_A   23.5    26      17      20      19.75   29.3    18.6    26.6    19.2    28.5    22.5    25
3   COMPANY_B   23.5    28      13.8    20.5    23.3    29      15      20      23.25   29.3    16      20

比如on row 7,january它的值是47,所以我想在列的值"Days"23.5,在所有其他行id=2,有0这就是为什么我想要搜索的值不同0

在的情况下,february上排9它的值是52和列Days26

march第一行的值为51的情况下,我想取列"Days"上的值为17的值,所以我会得到类似的结果:

ID  COMPANY     JAN     FEB     MAR...     
2   COMPANY_A   23.5    26      17

这样做的脚本如何?

xQbert

如果我们可以假设对于一个公司和 ID,没有一个月会有超过 1 个非零值...如果我们不能假设您是否希望它们 Sum() 在一起?最小值或最大值?只需相应地调整以下内容。注意:如果是 min,我们可能不得不在 else 上省略 0,并在 min 之后合并 0。

现在,如果您想要在没有第 1-12 列的值不是 0 的情况下为零……我们在每个 case 语句中添加一个 else 。

RexTester 演示

SELECT ID
     , Company
     , max(case when [1] <> 0 then Days else 0 end) as JAN
     , max(case when [2] <> 0 then Days else 0 end) as FEB
     , max(case when [3] <> 0 then Days else 0 end) as MAR
     , max(case when [4] <> 0 then Days else 0 end) as APR
     , max(case when [5] <> 0 then Days else 0 end) as MAY
     , max(case when [6] <> 0 then Days else 0 end) as JUN
     , max(case when [7] <> 0 then Days else 0 end) as JUL
     , max(case when [8] <> 0 then Days else 0 end) as AUG
     , max(case when [9] <> 0 then Days else 0 end) as SEP
     , max(case when [10] <> 0 then Days else 0 end) as OCT
     , max(case when [11] <> 0 then Days else 0 end) as NOV
     , max(case when [12] <> 0 then Days else 0 end) as DEC
FROM tblMonths
GROUP BY ID, Company;

给我们:

+----+----+-----------+------+-----+------+------+-------+------+------+------+-------+------+------+-----+
|    | ID |  Company  | JAN  | FEB | MAR  | APR  |  MAY  | JUN  | JUL  | AUG  |  SEP  | OCT  | NOV  | DEC |
+----+----+-----------+------+-----+------+------+-------+------+------+------+-------+------+------+-----+
|  1 |  2 | COMPANY_A | 23,5 |  26 |   17 |   20 | 19,75 | 29,3 | 18,6 | 26,6 |  19,2 | 28,5 | 22,5 |  25 |
|  2 |  3 | COMPANY_B | 23,5 |  28 | 13,8 | 20,5 |  23,3 |   29 |   15 |   20 | 23,25 | 29,3 |   16 |  20 |
+----+----+-----------+------+-----+------+------+-------+------+------+------+-------+------+------+-----+

当然,我不习惯两个月的命名MAR一个月的命名AGO所以我调整了它们。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何旋转?如何将多行转换为多列的一行?

来自分类Dev

SQL将一张表的多行合并为多列的一行

来自分类Dev

将单个表行+列名转换为列

来自分类Dev

使用熊猫将具有多行的数据框转换为一行?

来自分类Dev

如何使用PowerShell在一个CSV文件的同一行中基于包含多个值的单个单元格将一行分为多行

来自分类Dev

将多行转换为具有同一行标题的列

来自分类Dev

将一列“行”转换为SQL Server查询中的仅一列

来自分类Dev

MySQL将多行表转换为唯一行表

来自分类Dev

如何将一个SQL列转换为同一行上的多个列?

来自分类Dev

SQL:枢轴:根据条件将每一行转换为很多行

来自分类Dev

如何基于值将多行转换为多列

来自分类Dev

如何基于雅典娜(Presto)中的列值将一行分成多行?

来自分类Dev

Laravel:将分组数据转换为一行

来自分类Dev

SQL将一行转换为具有未知数量的不同值的列

来自分类Dev

sql如何将一行从数据表转换为xml?

来自分类Dev

将一行中的每个列与数据库sql中的每一行进行比较

来自分类Dev

将多行合并到数据框列的一行

来自分类Dev

如何将数据从一个表的多行复制到SQL Server中的另一行?

来自分类Dev

按标题将基于行的数据转换为列

来自分类Dev

mysqli fetch_array()仅将检索到的数据的第一行转换为数组

来自分类Dev

如何将“许多”基于行的关系转换为“一个”基于列的布局

来自分类Dev

将多行转换为一行

来自分类Dev

如何使用PowerShell在一个CSV文件的同一行中基于包含多个值的单个单元格将一行分为多行

来自分类Dev

将多行转换为具有同一行标题的列

来自分类Dev

如何进行SQL Server查询,以将每天或每月的“从日期到日期”列中的一行转换为多行

来自分类Dev

将两个模式之间的多行数据Perl转换为一行输出

来自分类Dev

如何将表与其自身进行比较并在仅一列中获取具有相同数据的行?

来自分类Dev

在 SQL Server 中将多行转换为一行

来自分类Dev

R 将列转换为仅行的数据透视表

Related 相关文章

  1. 1

    如何旋转?如何将多行转换为多列的一行?

  2. 2

    SQL将一张表的多行合并为多列的一行

  3. 3

    将单个表行+列名转换为列

  4. 4

    使用熊猫将具有多行的数据框转换为一行?

  5. 5

    如何使用PowerShell在一个CSV文件的同一行中基于包含多个值的单个单元格将一行分为多行

  6. 6

    将多行转换为具有同一行标题的列

  7. 7

    将一列“行”转换为SQL Server查询中的仅一列

  8. 8

    MySQL将多行表转换为唯一行表

  9. 9

    如何将一个SQL列转换为同一行上的多个列?

  10. 10

    SQL:枢轴:根据条件将每一行转换为很多行

  11. 11

    如何基于值将多行转换为多列

  12. 12

    如何基于雅典娜(Presto)中的列值将一行分成多行?

  13. 13

    Laravel:将分组数据转换为一行

  14. 14

    SQL将一行转换为具有未知数量的不同值的列

  15. 15

    sql如何将一行从数据表转换为xml?

  16. 16

    将一行中的每个列与数据库sql中的每一行进行比较

  17. 17

    将多行合并到数据框列的一行

  18. 18

    如何将数据从一个表的多行复制到SQL Server中的另一行?

  19. 19

    按标题将基于行的数据转换为列

  20. 20

    mysqli fetch_array()仅将检索到的数据的第一行转换为数组

  21. 21

    如何将“许多”基于行的关系转换为“一个”基于列的布局

  22. 22

    将多行转换为一行

  23. 23

    如何使用PowerShell在一个CSV文件的同一行中基于包含多个值的单个单元格将一行分为多行

  24. 24

    将多行转换为具有同一行标题的列

  25. 25

    如何进行SQL Server查询,以将每天或每月的“从日期到日期”列中的一行转换为多行

  26. 26

    将两个模式之间的多行数据Perl转换为一行输出

  27. 27

    如何将表与其自身进行比较并在仅一列中获取具有相同数据的行?

  28. 28

    在 SQL Server 中将多行转换为一行

  29. 29

    R 将列转换为仅行的数据透视表

热门标签

归档