没有聚合函数的 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错误

请教SQL server 中pivot的详细用法及语法规则

动态 SQL 透视查询中的分组和聚合函数

具有多列聚合的 SQL Server 数据透视表

如何在 oracle 数据库中为具有复杂聚合的数据透视编写等效的 sql 查询?

T-SQL:没有聚合的数据透视表