sql - 将 SQL 列转置为行
问题描述
我已将数据提取加载到一个虚拟表中,如下所示:
CREATE TABLE [dbo].[ID x Values](
IDNumber [varchar](50) NULL,
[3001] [varchar](50) NULL,
[3013] [varchar](50) NULL,
[3020] [varchar](50) NULL
)
INSERT INTO [dbo].[ID x Values]
([IDNumber]
,[3001]
,[3013]
,[3020])
Values('1111', '1', '', ''),
('2222', '', '2', ''),
('3333', '23', '', '4'),
('4444', '1', '', '2')
第一列是项目 ID。以下列是一些虚拟物品的 locationID 和库存水平。即项目 ID 1111 在位置 3001 有 1 个库存项目,在 3013 有 0 个单位,在 3020 有 0 个单位。
我在编写查询以将这些列转换为单行记录时遇到了一些麻烦。我正在寻找的结果是这样的:
ItemID LocationID InventoryLevel
------- ----------- ---------------
1111 3001 1
2222 3013 2
3333 3001 23
3333 3020 4
4444 3001 1
4444 3020 2
解决方案
您可以使用UNPIVOT
来获得所需的输出
SELECT
IDNumber AS ItemID,
LocationID,
InventoryLevel
FROM [dbo].[ID x Values]
UNPIVOT (InventoryLevel FOR LocationID IN ([3001], [3013], [3020])) UNPVT
WHERE LEN(InventoryLevel) > 0
推荐阅读
- ios - segue not transferring string in segue (swift4)
- php - PHPMailer 重定向到 GitHub
- dart - Refresh Flutter Text widget content every 5 minutes or periodically
- spring-boot - 如何在tomcat7上运行springboot2.0?
- angular - 以角度 5 处理浏览器选项卡
- python - 如何访问 Django ManyToMany Field 的数据?
- android - notifyDatasetChanged() 在 Kotlin 中不起作用
- spring-boot - 战争文件中的Spring Boot 2并部署在独立的tomcat中,无法重定向
- sparql - 为什么 TripleStore 不像 Property-Graph Store 那样实现为 Native Graph Store?
- sas - 验证 SAS 数据集