没有聚合函数的 SQL Server 数据透视查询
Posted
技术标签:
【中文标题】没有聚合函数的 SQL Server 数据透视查询【英文标题】:SQL Server pivot query without aggregate function 【发布时间】:2019-12-17 13:01:03 【问题描述】:我有一张表 Products,它存储主产品信息。此表中的列是:
Products
========
ProductNo Color Size Brand Price
A BLK S MS 12
B BLU S SMS 13
C RED S MS 14
我有另一个表 OProducts。此表中的列是:
OProducts
==========
ProductNo Color Size Warehouse IsActive Price Inventory
A BLK S WP Y 12 4
B BLU S NWP Y 13 5
C RED S MS Y 14 6
A BLK S NWP Y 12 7
我希望以这种方式显示数据。
ProductNo Clr SZ WP-IsAct WP-Inve NWP-IsAct NWP-Inve MS-IsAct MS-Inve
A BLK S Y 4 Y 7 -- --
B BLU S -- -- Y 5 -- --
C RED S -- -- -- -- Y 6
我认为,我不能使用 Pivot,因为不涉及聚合函数。
非常感谢任何帮助。
谢谢
【问题讨论】:
你可以使用MAX 【参考方案1】:这可以通过使用 CASE 语句来实现。以下查询是如何做到这一点的;
SELECT
x.ProductNo,
MAX(x.Color),
MAX(x.Size),
MAX(CASE WHEN y.Warehouse='WP' THEN y.IsActive ELSE '--' END) "WP-IsActive",
CASE WHEN y.Warehouse='WP' THEN SUM(y.Inventory) ELSE '--' END "WP-Inventory",
MAX(CASE WHEN y.Warehouse='NWP' THEN y.IsActive ELSE '--' END) "NWP-IsActive",
CASE WHEN y.Warehouse='NWP' THEN SUM(y.Inventory) ELSE '--' END "NWP-Inventory",
MAX(CASE WHEN y.Warehouse='WP' THEN y.IsActive ELSE '--' END) "MS-IsActive",
CASE WHEN y.Warehouse='WP' THEN SUM(y.Inventory) ELSE '--' END "MS-Inventory"
FROM Products x
JOIN OProducts y ON x.ProductNo=y.ProductNo
GROUP BY x.ProductNo
此查询可能需要稍作调整,因为我现在无法对其进行测试,但这将是主要思想。
对于不属于 GROUP BY 语句的列,必须使用 MAX()。
我还想知道你为什么要在两个表中重复颜色和尺寸,因为这对于两个表来说对于某个产品来说是相同的值。
【讨论】:
好的,可以在您的最终查询中发表评论,以便其他有您问题的人可以看到解决方案。以上是关于没有聚合函数的 SQL Server 数据透视查询的主要内容,如果未能解决你的问题,请参考以下文章
在数据透视聚合函数中使用CONCAT函数的SQL Server错误