1

おはようございます。以下に、アイテム番号ごとにフルフィルメントされた合計数量を要求するクエリがあります。

select h.cstponbr 'Customer PO No.',
       h.sopnumbe 'Invoice No.', 
       d.itemnmbr 'Item No.',
       d.itemdesc 'Item Description', 
       d.qtyfulfi 'Qty Fulfilled', 
       sum(d.qtyfulfi) 'Total Qty Fulufilled'
from sop10100 h 
inner join sop10200 d on (h.sopnumbe = d.sopnumbe)
where h.cstponbr = @CUSTPONUM
group by d.itemnmbr

以下のエラーを回避するために、クエリをどのように配置すればよいでしょうか。

列 'sop10100.CSTPONBR' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

前もって感謝します。

4

4 に答える 4

4

集計関数ではない SELECT ステートメントのすべての列 (この例では、sum(d.qtyfulfi) を除くすべてが GROUP BY 句にある必要があります。

グループ化された階層の順序でそれらをリストするだけです(私の頭では、より具体的でないものからより具体的なものへと想像しています)。

于 2012-10-25T03:16:58.803 に答える
4
you can use only columns that are functionally depended on group by clause .
于 2012-10-25T03:18:33.997 に答える
1

これにクエリを変更し、

select  h.cstponbr 'Customer PO No.',
        h.sopnumbe 'Invoice No.', 
        d.itemnmbr 'Item No.',
        d.itemdesc 'Item Description', 
        d.qtyfulfi 'Qty Fulfilled', 
        c.totalCount 'Total Qty Fulufilled'
from    sop10100 h 
        inner join sop10200 d 
            on (h.sopnumbe = d.sopnumbe)
        INNER JOIN
        (
            SELECT sopnumbe, SUM(qtyfulfi) totalCount
            FROM sop10200
            GROUP BY sopnumbe
        ) c ON c.sopnumbe = h.sopnumbe
where h.cstponbr = @CUSTPONUM
于 2012-10-25T03:13:14.447 に答える
1

Sql Server 2005以降を想定すると、これは機能するはずです

;With Cte As(
Select 
       h.cstponbr 'Customer PO No.',
       h.sopnumbe 'Invoice No.', 
       d.itemnmbr 'Item No.',
       d.itemdesc 'Item Description', 
       d.qtyfulfi 'Qty Fulfilled',
       sum(d.qtyfulfi) Over(Partition By  d.itemnmbr) 'Total Qty Fulufilled',
       Rn =Row_Number() Over(Partition By  d.itemnmbr Order By (Select 1))
from sop10100 h 
inner join sop10200 d on (h.sopnumbe = d.sopnumbe)
where h.cstponbr = @CUSTPONUM  )

Select *
From Cte
Where Rn = 1

より一般的なものにする必要があります

select h.cstponbr 'Customer PO No.',
       h.sopnumbe 'Invoice No.',
       X.ItemNo,
       X.ItemDescription,
       X.QtyFulfilled,
       X.TotalQtyFulufilled
from sop10100 h 
inner join
            (Select 
                X.ItemNo
                ,d.itemdesc 'ItemDescription'
                ,d.qtyfulfi 'QtyFulfilled'
                ,d.sopnumbe
                ,X.TotalQtyFulufilled
                From sop10200 d
            Inner Join
                (Select d.itemnmbr 'ItemNo',sum(d.qtyfulfi)'TotalQtyFulufilled'
                From sop10200 d
                group by d.itemnmbr)X
            On d.itemnmbr = X.ItemNo)X
on (h.sopnumbe = X.sopnumbe)
where h.cstponbr = @CUSTPONUM
于 2012-10-25T03:33:17.650 に答える