2016-08-29 5 views
-1

誰もこの問題を解決する方法を教えてもらえますか?サブクエリが1より大きい値を返しました。サブクエリがexpression.in SQLサーバーとして使用されるとき

ここに私のコードは

サブクエリです:私は次のために1トップの表示のみ1 productBarcode重複する値を選択した場合、私は、各storeNoための1000以上のproductBarcodeを持っているので、私はトップ100パーセントを使用

SELECT 
    A.StoreNo, C.[date], A.ProductBarCode, A.ProductQty 
INTO 
    ##inv1 
FROM 
    #calender C 
OUTER APPLY 
    (SELECT TOP 100 PERCENT * 
    FROM ##Temp I 
    WHERE I.Date < C.DATE 
     AND StoreNo IN (SELECT StoreNo FROM ##StoreList) 
    ORDER BY I.Date) A 
OPTION (maxrecursion 0) 

日。

Declare 
    @pheader nvarchar(Max), @sql_pivot nvarchar(max) 

Begin 
    SELECT 
     @pheader = STUFF((SELECT distinct ',' + QUOTENAME([StoreNo]) 
          FROM ##StoreList 
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 
     --SET @pheader = LEFT(@pheader, LEN(@pheader) - 1) 
                         SET @sql_pivot = 'SELECT * 
          FROM 
           (SELECT 
            S.[StoreNo], p.Date as Date, 
            p.ProductBarCode as ProductBarCode, 
            ISNULL(i.productqty - (SELECT ProductQty as runningsum 
                  FROM #Stock st 
                  WHERE st.date <= i.date 
                  AND st.storeno = i.storeno 
                  AND st.ProductBarCode = i.ProductBarCode), i.productqty) as ProductQty 

           FROM #inventory i 
           LEFT JOIN ##StoreList S ON S.StoreNo = i.StoreNo 
           LEFT JOIN #Stock st ON st.StoreNo = i.StoreNo AND st.ProductBarCode = i.ProductBarCode AND st.Date = i.Date 
           RIGHT JOIN ##product p ON i.Date = P.Date and p.ProductBarCode = i.ProductBarCode 
           -- where p.ProductBarCode IN(2300007115072,2300012213046,2300012712075) 
           GROUP BY S.storeNo, i.StoreNo, i.ProductBarCode, i.Date, p.ProductBarCode, p.Date, i.ProductQty) p 

          PIVOT (SUM(ProductQty) 
           FOR [StoreNo] IN ('+ @pheader+'))Pvt' 

     EXECUTE sp_executesql @sql_pivot 

私はその、このエラーに

を示す10、より多く選択した場合、私は一度に3〜4 storeNoを得るカントサブクエリは複数の値を返しました。 サブクエリが、=、!<、< =、>、> =、またはサブクエリが式 として使用されている場合は、これは許可されません。

私はSQL Serverを使用しています。

+3

エラーメッセージは、問題をきれいに説明しています。複数の値を返すサブクエリがあります。だから、副次的な選択はどこにありますか?問題がどこで起こっているのか正確に分かります。その部分を抽出して、そのクエリに対して複数の行を返すものを見つけ出します。 –

答えて

-1

サブクエリにトップ1を追加します。このように試してください

DECLARE @pheader NVARCHAR(Max) 
    ,@sql_pivot NVARCHAR(max) 

BEGIN 
    SELECT @pheader = STUFF((
       SELECT DISTINCT ',' + QUOTENAME([StoreNo]) 
       FROM ##StoreList 
       FOR XML PATH('') 
        ,TYPE 
       ).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 

    SET @pheader = LEFT(@pheader, LEN(@pheader) - 1) 
    SET @sql_pivot = 
     'SELECT * 
          FROM 
           (SELECT 
            S.[StoreNo], p.Date as Date, 
            p.ProductBarCode as ProductBarCode, 
            ISNULL(i.productqty - (SELECT top 1 ProductQty as runningsum 
                  FROM #Stock st 
                  WHERE st.date <= i.date 
                  AND st.storeno = i.storeno 
                  AND st.ProductBarCode = i.ProductBarCode), i.productqty) as ProductQty 

           FROM #inventory i 
           LEFT JOIN ##StoreList S ON S.StoreNo = i.StoreNo 
           LEFT JOIN #Stock st ON st.StoreNo = i.StoreNo AND st.ProductBarCode = i.ProductBarCode AND st.Date = i.Date 
           RIGHT JOIN ##product p ON i.Date = P.Date and p.ProductBarCode = i.ProductBarCode 
           -- where p.ProductBarCode IN(2300007115072,2300012213046,2300012712075) 
           GROUP BY S.storeNo, i.StoreNo, i.ProductBarCode, i.Date, p.ProductBarCode, p.Date, i.ProductQty) p 

          PIVOT (SUM(ProductQty) 
           FOR [StoreNo] IN (' 
     + @pheader + '))Pvt' 

    EXECUTE sp_executesql @sql_pivot 
END 
関連する問題