首页 > 解决方案 > 如何按位置而不是按列选择数量?

问题描述

我正在创建一个自定义 SQL 视图,我们可以在其中按位置查找项目数量。目前它在列中完美地提供了信息,但是我可以通过子查询或别名来提供这些信息以使该信息连续出现吗?

我尝试了一个选择子查询,但是它返回

消息 512,级别 16,状态 1,第 1 行
子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 或子查询用作表达式时,这是不允许的。

SELECT SKU, DESCRIPTION, QUANTITY, LOCATION
FROM INVENTORY

输出:

RB  RED BALL    0   OVERSTOCK
RB  RED BALL    1   ROOM 1
RB  RED BALL    3   ROOM 2
RB  RED BALL    5   ROOM 3

我愿意去看:

SKU     DESCRIPTION    QTYOVERSTOCK QTYROOM1 QTYROOM2 QTYROOM3
--------------------------------------------------------------
RB      RED BALL            0           1       3        5

标签: sqlsql-server

解决方案


您只需要一个基本的数据透视查询:

SELECT
    SKU,
    DESCRIPTION,
    MAX(CASE WHEN LOCATION = 'OVERSTOCK' THEN QUANTITY END) AS QTYOVERSTOCK,
    MAX(CASE WHEN LOCATION = 'ROOM 1' THEN QUANTITY END) AS QTYROOM1,
    MAX(CASE WHEN LOCATION = 'ROOM 2' THEN QUANTITY END) AS QTYROOM2,
    MAX(CASE WHEN LOCATION = 'ROOM 3' THEN QUANTITY END) AS QTYROOM3
FROM INVENTORY
GROUP BY
    SKU,
    DESCRIPTION;

推荐阅读