sql – 将一行转换为具有较少列的多行

前端之家收集整理的这篇文章主要介绍了sql – 将一行转换为具有较少列的多行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在Postgresql中将单行转换为多行,其中删除了一些列.这是当前输出的示例:
  1. name | st | ot | dt |
  2. -----|----|----|----|
  3. Fred | 8 | 2 | 3 |
  4. Jane | 8 | 1 | 0 |
  5. Samm | 8 | 0 | 6 |
  6. Alex | 8 | 0 | 0 |

使用以下查询

  1. SELECT
  2. name,st,ot,dt
  3. FROM
  4. times;

这就是我想要的:

  1. name | t | val |
  2. -----|----|-----|
  3. Fred | st | 8 |
  4. Fred | ot | 2 |
  5. Fred | dt | 3 |
  6. Jane | st | 8 |
  7. Jane | ot | 1 |
  8. Samm | st | 8 |
  9. Samm | dt | 6 |
  10. Alex | st | 8 |

如何修改查询以获得上述所需输出

解决方法

  1. SELECT
  2. times.name,x.t,x.val
  3. FROM
  4. times cross join lateral (values('st',st),('ot',ot),('dt',dt)) as x(t,val)
  5. WHERE
  6. x.val <> 0;

猜你在找的MsSQL相关文章