SQLServer子查询单位为列
发布时间:2020-12-12 14:17:13 所属栏目:MsSql教程 来源:网络整理
导读:我正在尝试将子查询作为具有条件的列. 我从SQL Server得到的错误是: 子查询返回的值超过1.当子查询遵循=,!=,, =,, =或子查询用作表达式时,不允许这样做. 我正在选择更多列,但这里是给出错误的主要查询: SELECT ItemNo,Channel,Brand,TotalUnits,(SELECT T
我正在尝试将子查询作为具有条件的列.
我从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子句中并将其正常连接到主表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |