SQLServer子查询单位为列

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

我从sql Server得到的错误是:

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

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

SELECT ItemNo,Channel,Brand,TotalUnits,(SELECT TotalUnits FROM Table1 WHERE Locked = 1) As LockedUnits
FROM Table1

编辑:锁定是0或1值

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

ItemNO   Channel   Brand    TotalUnits    LockedUnits
1        5         Adidas   100           80
2        7         Nike     500           360

解决方法

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

SELECT ItemNo,case when Locked = 1 then TotalUnits else null end As LockedUnits
FROM Table1

您可以使用子选择来执行此操作,但您需要将子选择加入主查询.假设ItemNo是唯一的,它将如下所示:

SELECT ItemNo,(SELECT TotalUnits FROM Table1 t2 WHERE Locked = 1
        WHERE t1.itemno = t2.itemno) As LockedUnits
FROM Table1 t1

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

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 &#39;EastRiver&#39; 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...