sql - 在 SQL 中反透视表时获取值存在的列的位置
问题描述
我试图在 SQL Server 中对 col2、col3、col4 列进行反透视时获取值的列位置
df1
col1 col2 col3 col4
1 AAA BBB
2 ABC CCC DDD
result
col1 [All] [position]
1 AAA 1
1 BBB 2
2 ABC 1
2 CCC 2
2 DDD 3
我可以通过使用以下内容来取消透视表
SELECT a.col1, a.[all]
from df1 as t
UNPIVOT
(
[all] for col_nm in (
col2, col3, col4
) as a
解决方案
如果您只需要知道它来自哪一列,我认为您可以简单地将 col_nm 包含到您的 select 语句中:
SELECT a.col1
,a.[all]
,a.col_nm
FROM df1 AS t UNPIVOT([all] FOR col_nm IN(col2, col3, col4)) AS a;
如果您需要知道列索引号 - 那么根据上面应该很容易 - 也许对列名进行 switch-case 检查;或者,
如果这是物理表或临时表,您可以使用 sys.tables 和 sys.columns 重新连接,以根据列名查找列索引 (columnId)。
推荐阅读
- snowflake-cloud-data-platform - 使用 Snowflake+DBT 时随机发生无效的 JWT 令牌
- r - 在R中的坐标周围绘制多边形
- javascript - 在 React Native 中使用 readAsStringAsync 将图像数组转换为 base64
- r - 用多列中的多个值替换多个字符?R
- angular - Angular Guards:防止手动访问 URL 但授权刷新
- java - Java中的计算器,显示错误的功能。网豆
- regex - Notepad++ 中的 RegEx 查找管道少于或多于 n 个的行
- python - 根据文件名填充 NaN
- laravel - 如何在基本构造函数中判断页面是否为 404?
- c# - “空白”通用类型参数 - 用例和解释