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

用户名

我有两个表要合并。第一个表用于客户,其他表用于产品。目前,我有22种产品,但我希望有一个灵活的数据库设计,因此与其在产品数据库中没有22列,我为每个客户为每个产品提供1行,所以如果我总体上添加或删除1种产品,我不会必须更改数据库结构。

我想有一条select语句,在这里我为每个客户端选择所有产品,并且输出应该在一行中,每个产品都有一列。

我看到了其他一些类似的问题,但是这样做的目的是将所有行连接到1列中,这是我不想要的。

假设有2个客户和3个产品。

客户表:

ClientId | ClientName
---------------------
 1       | Name1
 2       | Name2

餐桌产品

ProductId | ClientId | Product
-------------------------------------
 1        |   1      |  SomeproductA
 2        |   1      |  SomeproductB
 3        |   1      |  SomeproductA
 4        |   2      |  SomeproductC
 5        |   2      |  SomeproductD
 6        |   2      |  SomeproductA

输出应该是这样的:

表输出:

 ClientId | ClientName | Product1     | Product 2    | Product 3
 -------------------------------------------------------------------
     1    | Name1      | SomeproductA | SomeproductB | SomeproductA
     2    | Name2      | SomeproductC | SomeproductD | SomeproductA

从select语句应该计算每个客户的不同产品的数量(对于所有客户而言,它们始终是相同的)的角度来看,完美的解决方案也是灵活的,例如,如果我为所有客户添加或删除1个产品,不应更改选择语句。

瓦莱克斯

MYSQL版本

这是查询。联合查询使用用户定义的变量MySQL功能为每个客户端组内的每个产品生成RowNumber(1,2,3,...)外部查询使用GROUP BYCASE和内部表中的行号构成PIVOT表。如果您需要更改产品列数,请考虑动态创建此查询并将其添加MAX(CASE WHEN p.RowNum=X THEN p.Product END) as ProductX到选择列表中。

select Clients.ClientName,
       MAX(CASE WHEN p.RowNum=1 THEN p.Product END) as Product1,
       MAX(CASE WHEN p.RowNum=2 THEN p.Product END) as Product2,
       MAX(CASE WHEN p.RowNum=3 THEN p.Product END) as Product3,
       MAX(CASE WHEN p.RowNum=4 THEN p.Product END) as Product4


FROM Clients
JOIN
(
  SELECT Products.*,
       if(@ClientId<>ClientId,@rn:=0,@rn),
       @ClientId:=ClientId,
       @rn:=@rn+1 as RowNum

  FROM Products, (Select @rn:=0,@ClientId:=0) as t
  ORDER BY ClientId,ProductID
 ) as P 
   ON Clients.ClientId=p.ClientId

GROUP BY Clients.ClientId

SQLFiddle demo

SQL Server版本:

select Clients.ClientId,
       MAX(Clients.ClientName),
       MAX(CASE WHEN p.RowNum=1 THEN p.Product END) as Product1,
       MAX(CASE WHEN p.RowNum=2 THEN p.Product END) as Product2,
       MAX(CASE WHEN p.RowNum=3 THEN p.Product END) as Product3,
       MAX(CASE WHEN p.RowNum=4 THEN p.Product END) as Product4


FROM Clients
JOIN
(
  SELECT Products.*,
       ROW_NUMBER() OVER (PARTITION BY ClientID ORDER BY ProductID) 
         as RowNum

  FROM Products
 ) as P 
   ON Clients.ClientId=p.ClientId
GROUP BY Clients.ClientId

SQLFiddle demo

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

如何将 SQL Server 行转换为多列?

来自分类Dev

MySQL - 如何将非唯一行转换为列并保持完整性?

来自分类Dev

将多行转换为一行

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何将包含多行的单列转换为行

来自分类Dev

如何将一行旋转为一列

来自分类Dev

如何将一行代码分成多行?

来自分类Dev

如何将多行结果集变成一行?

来自分类Dev

如何将行转换为列

来自分类Dev

如何将多行转换为固定的列长

来自分类Dev

如何将多行转换为单行

来自分类Dev

如何将缩进的文本转换为一行xml字符串?

来自分类Dev

在R中,如何将一行中的每个值转换为该行总和的比例?

来自分类Dev

如何将Pandas DataFrame的每一行转换为新的nxm矩阵?

来自分类Dev

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

来自分类Dev

如何将迭代下的功能转换为熊猫中的一行

来自分类Dev

如何将R中的JSON数据转换为非一行

来自分类Dev

如何将 MException 转换为一行字符串

来自分类Dev

如何将任意长度的 Array[String] 转换为 spark 中的一行 DataFrame

来自分类Dev

如何将多列数据转换为DolphinDB中的一列?

来自分类Dev

如何将多行转为多列?

来自分类Dev

如何将字典的多列转换为数据框?

来自分类Dev

如何将 null(多列)转换为 0

来自分类Dev

如何将列表转换为具有多列的行

来自分类Dev

如何将具有字符串列表的行转换为多列

来自分类Dev

如何将每3个值从一行转移到多列?

Related 相关文章

  1. 1

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

  2. 2

    如何将 SQL Server 行转换为多列?

  3. 3

    MySQL - 如何将非唯一行转换为列并保持完整性?

  4. 4

    将多行转换为一行

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

    如何将包含多行的单列转换为行

  9. 9

    如何将一行旋转为一列

  10. 10

    如何将一行代码分成多行?

  11. 11

    如何将多行结果集变成一行?

  12. 12

    如何将行转换为列

  13. 13

    如何将多行转换为固定的列长

  14. 14

    如何将多行转换为单行

  15. 15

    如何将缩进的文本转换为一行xml字符串?

  16. 16

    在R中,如何将一行中的每个值转换为该行总和的比例?

  17. 17

    如何将Pandas DataFrame的每一行转换为新的nxm矩阵?

  18. 18

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

  19. 19

    如何将迭代下的功能转换为熊猫中的一行

  20. 20

    如何将R中的JSON数据转换为非一行

  21. 21

    如何将 MException 转换为一行字符串

  22. 22

    如何将任意长度的 Array[String] 转换为 spark 中的一行 DataFrame

  23. 23

    如何将多列数据转换为DolphinDB中的一列?

  24. 24

    如何将多行转为多列?

  25. 25

    如何将字典的多列转换为数据框?

  26. 26

    如何将 null(多列)转换为 0

  27. 27

    如何将列表转换为具有多列的行

  28. 28

    如何将具有字符串列表的行转换为多列

  29. 29

    如何将每3个值从一行转移到多列?

热门标签

归档