不使用SUM或MAX的替代方法来旋转数据?

huangapple go评论91阅读模式
英文:

Alternate way to pivot the data without using SUM or MAX?

问题

我需要转置数据,但当我使用 PIVOT SUM / MAX 进行转置时,它会对值进行聚合。如何在不进行聚合的情况下获取数据?

需要帮助解决这个 SQL 查询以获得输出。

表中的数据:

  1. Code ColVal
  2. A 1
  3. A 2
  4. A 3
  5. B 1
  6. B 2
  7. B 3
  8. B 4
  9. C 1
  10. C 2

期望的输出:

  1. A B C
  2. 1 1 1
  3. 2 2 2
  4. 3 3 NULL
  5. NULL 4 NULL

查询:

  1. SELECT A, B, C
  2. FROM (
  3. SELECT Code, ColVal
  4. FROM Table) TBL
  5. PIVOT (SUM(ColVal) FOR Code IN (A, B, C)) AS pvt
英文:

I need to transpose a data but when I do so using PIVOT SUM / MAX is aggregating the value. How to get the data as without aggregating?

Need a help on this SQL query to get output.

Data in table:

  1. Code ColVal
  2. A 1
  3. A 2
  4. A 3
  5. B 1
  6. B 2
  7. B 3
  8. B 4
  9. C 1
  10. C 2

Expected output:

  1. A B C
  2. 1 1 1
  3. 2 2 2
  4. 3 3 NULL
  5. NULL 4 NULL

Query:

  1. SELECT A, B, C
  2. FROM (
  3. SELECT Code,ColA
  4. FROM Table) TBL
  5. PIVOT (SUM(ColA) FOR Code IN (A,B,C)) AS pvt

答案1

得分: 3

PIVOT需要一个聚合函数。

要获得您想要的结果,您需要为隐式的GROUP BY添加一个合成列。 示例

每个RN, Code组合只会有一行,所以MAX只是对单个值进行聚合

  1. (
  2. 选择 Code/*扩展列*/
  3. ColVal/*值列*/
  4. ROW_NUMBER() OVER (PARTITION BY Code ORDER BY ColVal) AS RN /*分组列*/
  5. YourTable) TBL
  6. PIVOT (MAX(ColVal) FOR Code IN (A,B,C)) AS pvt
英文:

PIVOT requires an aggregate.

To get your desired results you need to add a synthetic column for the implicit GROUP BY. Fiddle.

There will only be one row per RN, Code combination so the MAX just aggregates that single value

  1. SELECT A, B, C
  2. FROM (
  3. SELECT Code, /* Spreading column */
  4. ColVal, /* value column */
  5. ROW_NUMBER() OVER (PARTITION BY Code ORDER BY ColVal) AS RN /* grouping column */
  6. FROM YourTable) TBL
  7. PIVOT (MAX(ColVal) FOR Code IN (A,B,C)) AS pvt

huangapple
  • 本文由 发表于 2023年7月18日 00:56:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/76706617.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定