SQLServer子查询单位为列

yee*_*123 3 sql sql-server

我正在尝试将子查询作为具有条件的列.

我从SQL Server得到的错误是:

子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.

我正在选择更多列,但这里是给出错误的主要查询:

SELECT ItemNo, Channel, Brand, TotalUnits,
       (SELECT TotalUnits FROM Table1 WHERE Locked = 1) As LockedUnits
FROM Table1
Run Code Online (Sandbox Code Playgroud)

编辑:锁定是0或1值

理想情况下,查询将返回此值(LockedUnits始终是TotalUnits的子集):

ItemNO   Channel   Brand    TotalUnits    LockedUnits
1        5         Adidas   100           80
2        7         Nike     500           360
Run Code Online (Sandbox Code Playgroud)

All*_*lan 5

看起来你要做的就是TotalUnits只获取那些行Locked = 1.如果是这种情况,你最好使用case:

SELECT ItemNo, Channel, Brand, TotalUnits,
       case when Locked = 1 then TotalUnits else null end As LockedUnits
FROM Table1
Run Code Online (Sandbox Code Playgroud)

您可以使用子选择来执行此操作,但您需要将子选择加入主查询.假设ItemNo是唯一的,它看起来像这样:

SELECT ItemNo, Channel, Brand, TotalUnits,
       (SELECT TotalUnits FROM Table1 t2 WHERE Locked = 1
        WHERE t1.itemno = t2.itemno) As LockedUnits
FROM Table1 t1
Run Code Online (Sandbox Code Playgroud)

当然,两次击中单个表来获取已经返回的行中的值是有点愚蠢的.


注释响应:您唯一希望进行子选择的时间是从同一个表中的不同表或不同行获取数据.而且,即便如此,我更喜欢将表放在where子句中并将其正常连接到主表.