Sql server 子查询返回了多个值。谁能帮我解决这个问题?

Sql server 子查询返回了多个值。谁能帮我解决这个问题?,sql-server,tsql,subquery,Sql Server,Tsql,Subquery,下面的查询正在生成错误消息,子查询返回了多个值 如何更改查询以避免此错误 查询: SELECT STK.SPECODE AS 'Space Code', STK.STGRPCODE AS 'Group Code', STK.LOWLEVELCODES1 AS 'index', ISNULL(STK.CODE,0) AS 'Item Code', ISNULL(STK.NAME,0) AS 'Item Name', ISNULL(BRC.BARCODE,0) AS 'Barcode', ISNUL

下面的查询正在生成错误消息,子查询返回了多个值

如何更改查询以避免此错误

查询:

SELECT
STK.SPECODE AS 'Space Code',
STK.STGRPCODE AS 'Group Code',
STK.LOWLEVELCODES1 AS 'index',
ISNULL(STK.CODE,0) AS 'Item Code',
ISNULL(STK.NAME,0) AS 'Item Name',
ISNULL(BRC.BARCODE,0) AS 'Barcode',
ISNULL(STK.VAT,0) AS 'Vat',
ISNULL(STK.SELLVAT,0) AS 'Sell Vat',
ISNULL((select top 1 FYT.PRICE from LG_114_PRCLIST FYT where FYT.CARDREF=STK.LOGICALREF AND FYT.PTYPE=1 ),0) AS [Purchase Price (Excluding VAT) ],
ISNULL((select top 1 FYT.PRICE from LG_114_PRCLIST FYT where FYT.CARDREF=STK.LOGICALREF AND FYT.PTYPE=2 AND FYT.PRIORITY=2  ),0) AS [Sale Price (including VAT)],
(SELECT
   SUM(TOT.ONHAND)
FROM
   LV_114_01_STINVTOT TOT, LG_114_ITEMS STK
WHERE
   TOT.STOCKREF=STK.LOGICALREF AND TOT.INVENNO=-1 
   GROUP BY STK.CODE,STK.NAME     
   ) AS MIKTAR 
FROM LG_114_PRCLIST AS FYT LEFT OUTER JOIN LG_114_ITEMS AS STK ON STK.LOGICALREF=FYT.CARDREF 
LEFT OUTER JOIN LG_114_UNITBARCODE BRC ON BRC.ITEMREF=STK.LOGICALREF 
LEFT OUTER JOIN LV_114_01_STLINE HAR ON HAR.STOCKREF=STK.LOGICALREF 
Where BRC.BARCODE<>'' AND STK.ACTIVE=1
GROUP BY
FYT.CARDREF,STK.SPECODE,STK.STGRPCODE,STK.LOWLEVELCODES1,STK.CODE,STK.NAME,BRC.BARCODE,STK.VAT,STK.SELLVAT,STK.LOGICALREF

谢谢

将子查询作为交叉或外部应用移动到FROM节

SELECT ...
   t1.MIKTAR
FROM ...
CROSS APPLY(
   SELECT SUM(TOT.ONHAND) AS MIKTAR
   FROM LV_114_01_STINVTOT TOT, LG_114_ITEMS STK
   WHERE TOT.STOCKREF=STK.LOGICALREF AND TOT.INVENNO=-1 
   GROUP BY STK.CODE,STK.NAME     
   ) t1

我看到在子查询OP中,LV_114_01_STINVTOT与LG_114_项连接在一起。我想这可以通过简单的左连接和求和来实现:


您别名为MIKTAR的子查询可能是这里出现问题的原因。假设数据中有多个组,它几乎肯定会返回多个记录。我不能给出一个确切的答案,因为我不知道你们的数据。[编辑]明确了问题
SELECT
    STK.SPECODE AS 'Space Code',
    STK.STGRPCODE AS 'Group Code',
    STK.LOWLEVELCODES1 AS 'index',
    ISNULL(STK.CODE,0) AS 'Item Code',
    ISNULL(STK.NAME,0) AS 'Item Name',
    ISNULL(BRC.BARCODE,0) AS 'Barcode',
    ISNULL(STK.VAT,0) AS 'Vat',
    ISNULL(STK.SELLVAT,0) AS 'Sell Vat',
    ISNULL((select top 1 FYT.PRICE from LG_114_PRCLIST FYT where FYT.CARDREF=STK.LOGICALREF AND FYT.PTYPE=1 ),0) AS [Purchase Price (Excluding VAT) ],
    ISNULL((select top 1 FYT.PRICE from LG_114_PRCLIST FYT where FYT.CARDREF=STK.LOGICALREF AND FYT.PTYPE=2 AND FYT.PRIORITY=2  ),0) AS [Sale Price (including VAT)],
    SUM(TOT.ONHAND) AS MIKTAR               -- THIS
FROM
    LG_114_PRCLIST AS FYT
LEFT OUTER JOIN
    LG_114_ITEMS AS STK ON STK.LOGICALREF = FYT.CARDREF 
LEFT OUTER JOIN
    LG_114_UNITBARCODE BRC ON BRC.ITEMREF = STK.LOGICALREF 
LEFT OUTER JOIN
    LV_114_01_STLINE HAR ON HAR.STOCKREF = STK.LOGICALREF
LEFT JOIN                                   -- THIS
    LV_114_01_STINVTOT TOT                  -- THIS
        ON TOT.STOCKREF = STK.LOGICALREF    -- THIS
        AND TOT.INVENNO = -1                -- THIS
WHERE
    BRC.BARCODE <> ''
    AND STK.ACTIVE = 1
GROUP BY
    FYT.CARDREF,
    STK.SPECODE, STK.STGRPCODE,
    STK.LOWLEVELCODES1,
    STK.CODE, STK.NAME,
    BRC.BARCODE,
    STK.VAT, STK.SELLVAT, STK.LOGICALREF