3

I'm trying to get a subquery as a column with a condition.

The error I get from SQL Server is:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

There are a bunch more columns I'm selecting, but here is the main query that is giving ma an error:

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

EDIT: Locked is a 0 or 1 value

Ideally the query would return this (LockedUnits is always a subset of TotalUnits):

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

4 に答える 4

8

あなたがやろうとしているのはTotalUnitsLocked = 1。その場合は、次を使用することをお勧めしますcase

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

副選択を使用してこれを行うことができますが、副選択をメインクエリに結合する必要があります。が一意であると仮定するItemNoと、次のようになります。

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

もちろん、1つのテーブルを2回ヒットして、返される行にすでに含まれている値を取得するのは、ちょっとばかげています。


コメントの応答:副選択を希望するのは、別のテーブルまたは同じテーブルの別の行からデータを取得する場合のみです。そして、それでも、私はテーブルをwhere句に入れて、通常どおりメインテーブルに結合することを好みます。

于 2012-12-13T23:07:23.277 に答える
1

try putting SELECT sum(TotalUnits) in the subquery

于 2012-12-13T22:56:59.927 に答える
1

You have to limit the subquery to a single result, otherwise it cannot be returned in a result set column. You will need to narrow down your results to a single record by SUM(TotalUnits), SELECT TOP 1, or SELECT DISTINCT.

于 2012-12-13T22:59:24.293 に答える
0
SELECT ItemNo, Channel, Brand, TotalUnits,
   (SELECT sum(TotalUnits) FROM Table1 WHERE Locked = 1) As LockedUnits
FROM Table1
group by ItemNo, Channel, Brand, TotalUnits
于 2012-12-13T23:03:28.913 に答える