【问题标题】:Why does pivoting of a string data column work with row_number?为什么字符串数据列的旋转与 row_number 一起使用?
【发布时间】:2020-05-17 01:16:21
【问题描述】:

我遇到了一个问题,我需要在字符串列上进行旋转。我在下面的链接中找到了解决方案,但不明白为什么在使用 row_number 时旋转对带有字符串数据的列有效。

Need to Pivot String values in SQL server

表定义:

ColumnName  DataType
----------  --------
Occupation  String 
Name        String

数据:

Occupation  Name
----------  ----
Developer    A
Developer    B
Designer     X
Coder        Y
Coder        Z

使用的查询是:

SELECT  [Developer],
        [Designer],
        [Coder]
FROM (
      SELECT  *,
              ROW_NUMBER() OVER (PARTITION BY Occupation ORDER BY (SELECT NULL)) 
              RN
      FROM 
           #temp
     ) as t
PIVOT 
    (
      MAX(Name) 
      FOR Occupation 
      IN ([Developer],[Designer],[Coder])
    ) as pvt    

输出:

Developer   Designer    Coder
A           X           Y
B           NULL        Z

【问题讨论】:

  • 。 .一个问题本身应该是完整的。这需要样本数据、所需结果和适当的数据库标签。指向“我不明白”的链接不是一个有效的问题。

标签: sql-server pivot row-number


【解决方案1】:

在上一个问题中使用了“MAX”聚合函数。它只为包含两列的表返回一行:一个用于开发人员,一个用于编码器等。 Row_number 函数将维度添加到表中,您会得到:

Developer   Designer    Coder
A              X          Y
B             NULL        Z

而不是这个:

Developer   Designer    Coder
B              X          Z

【讨论】:

  • 还是看不懂。能否请您详细说明一下。
  • @user9463 在 SQL 中旋转需要一个聚合函数(sum、count、avg、max、min)。由于我们处理的是字符串数据,因此我们只能使用 MAX 和 MIN 函数。如果我们在输入表中只有两列,这些函数只为数据透视表中的一列返回一个值。因此,在这种情况下,查询只为每个作业返回具有最大 ASCII 值的字母(B、X 和 Z)。我们在每个作业上添加一个带有行号的列来分隔子集,并将聚合函数应用于每个值而不是它们的子集。我们得到多行的枢轴,而不是单行的枢轴
猜你喜欢
  • 2011-07-24
  • 1970-01-01
  • 2015-07-03
  • 2023-03-15
  • 2023-03-13
  • 1970-01-01
  • 2020-07-10
  • 2017-09-02
  • 1970-01-01
相关资源
最近更新 更多