簡體   English   中英

在SQL中選擇內部聯接選擇

[英]Select Inner Join Select in SQL

嗨,我有一個選擇內部加入聲明,這似乎還可以,但我出錯了。 這是我的查詢

ALTER PROCEDURE [dbo].[POBalance]  @PONumber nvarchar(50)
AS BEGIN
Select( 
Select 
    A.Description,
    C.qty as POqty,
    B.QtyDelivered as PDQty, 
    case when A.partialflag ='false' 
    then '0'
    else
    A.qty  end as Balance,
    A.Unit,
    A.Unitprice,
    A.Partialflag 
from tblPOdetails as A

Inner Join  ( SELECT  id, SUM(Qty) AS QtyDelivered
                                    FROM         dbo.tblPDdetails
                                    WHERE     (PONo = @PONumber)
                                    GROUP BY id)as B On A.id = B.id   
Inner Join tblpodetailshistory as C on A.id =C.id

where A.PONo = @PONumber)
END

我收到此錯誤。

如果未使用EXISTS引入子查詢,則只能在選擇列表中指定一個表達式。

先感謝您。

您應該在外部select語句中包含列名和From關鍵字

ALTER PROCEDURE [dbo].[POBalance]  @PONumber nvarchar(50)
AS BEGIN
Select Description, POqty, PDQty, Balance, Unit, Unitprice, Partialflag  from ( 
Select 
    A.Description,
    C.qty as POqty,
    B.QtyDelivered as PDQty, 
    case when A.partialflag ='false' 
    then '0'
    else
    A.qty  end as Balance,
    A.Unit,
    A.Unitprice,
    A.Partialflag 
from tblPOdetails as A

Inner Join  ( SELECT  id, SUM(Qty) AS QtyDelivered
                                    FROM         dbo.tblPDdetails
                                    WHERE     (PONo = @PONumber)
                                    GROUP BY id)as B On A.id = B.id   
Inner Join tblpodetailshistory as C on A.id =C.id

where A.PONo = @PONumber)
END

實際上,您不需要編寫外部選擇,可以將其重寫為

ALTER PROCEDURE [dbo].[POBalance]  @PONumber nvarchar(50)
AS BEGIN

Select 
    A.Description,
    C.qty as POqty,
    B.QtyDelivered as PDQty, 
    case when A.partialflag ='false' 
    then '0'
    else
    A.qty  end as Balance,
    A.Unit,
    A.Unitprice,
    A.Partialflag 
from tblPOdetails as A

Inner Join  ( SELECT  id, SUM(Qty) AS QtyDelivered
                                    FROM         dbo.tblPDdetails
                                    WHERE     (PONo = @PONumber)
                                    GROUP BY id)as B On A.id = B.id   
Inner Join tblpodetailshistory as C on A.id =C.id

where A.PONo = @PONumber
END

問題出在查詢的開頭,

Select( Select ....

刪除初始的“選擇(”,然后重試查詢。當您運行

Select (Select ..) 

第二個選擇只能返回一列(除非您串聯返回的數據)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM