1

以下は、私が受け取っているSQLステートメントとエラーです。両方のテーブルから可能なすべてのフィールドを含めましたが、何が問題なのですか? 返品されたすべてのアイテムを prodID でグループ化したい

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

 SELECT TOP 20 
         ADMINSTATUS,   CURRENCY,   CUSTOMERID,     CUSTOMERMESSAGE,    DELTIME,    DELTOTAL,   DISCOUNT,   DISCOUNTCODE,   
         IP,    ITEMDES,    OPTIONS,    ORDEREDID,  ORDERTOTAL,
         oi.ORDER_ID,   o.ORDER_ID,     PAYMENTTYPE,    PPRICE,     PRODID,     QTY,    REASON,     SECURITYKEY,    SHIPADDRESS1,   
         SHIPADDRESS2,  SHIPADDRESS3,   SHIPCITY,   SHIPCOMPANY,    
         SHIPCOUNTRY,   SHIPCOUNTY,     SHIPMETHOD,
         SHIPNAME,  SHIPPOSTCODE,   STATUS,     STOCKCODE,  SUBTOTAL,   TAX,    TAXABLE,    TIMEDATE,   TXAUTHNO,   VENDORTXCODE,   VPSTXID
         FROM orderedItems oi
         left join orders o on  oi.order_id = o.order_id


    Group by PRODID
4

3 に答える 3

2

それが言うように、GROUP BY を使用している場合は、返すフィールドでグループ化するか、集計関数を適用する必要があるためです。例: MAX、MIN など

SELECT TOP 20  
         ADMINSTATUS,   CURRENCY,   CUSTOMERID,     CUSTOMERMESSAGE,    DELTIME,    DELTOTAL,   DISCOUNT,   DISCOUNTCODE,    
         IP,    ITEMDES,    OPTIONS,    ORDEREDID,  ORDERTOTAL, 
         oi.ORDER_ID,   o.ORDER_ID,     PAYMENTTYPE,    PPRICE,     PRODID,     QTY,    REASON,     SECURITYKEY,    SHIPADDRESS1,    
         SHIPADDRESS2,  SHIPADDRESS3,   SHIPCITY,   SHIPCOMPANY,     
         SHIPCOUNTRY,   SHIPCOUNTY,     SHIPMETHOD, 
         SHIPNAME,  SHIPPOSTCODE,   STATUS,     STOCKCODE,  SUBTOTAL,   TAX,    TAXABLE,    TIMEDATE,   TXAUTHNO,   VENDORTXCODE,   VPSTXID 
         FROM orderedItems oi 
         left join orders o on  oi.order_id = o.order_id 



Group by          ADMINSTATUS,   CURRENCY,   CUSTOMERID,     CUSTOMERMESSAGE,    DELTIME,    DELTOTAL,   DISCOUNT,   DISCOUNTCODE,    
     IP,    ITEMDES,    OPTIONS,    ORDEREDID,  ORDERTOTAL, 
     oi.ORDER_ID,   o.ORDER_ID,     PAYMENTTYPE,    PPRICE,     PRODID,     QTY,    REASON,     SECURITYKEY,    SHIPADDRESS1,    
     SHIPADDRESS2,  SHIPADDRESS3,   SHIPCITY,   SHIPCOMPANY,     
     SHIPCOUNTRY,   SHIPCOUNTY,     SHIPMETHOD, 
     SHIPNAME,  SHIPPOSTCODE,   STATUS,     STOCKCODE,  SUBTOTAL,   TAX,    TAXABLE,    TIMEDATE,   TXAUTHNO,   VENDORTXCODE,   VPSTXID 
于 2012-08-31T13:57:02.353 に答える
1

個別の列を選択する場合、それらが集約関数でない限り、それらはすべて GROUP BY 句に表示される必要があります。

ここを参照してください: http://msdn.microsoft.com/en-us/library/ms177673.aspx

例えば

SELECT TOP 20 
         ADMINSTATUS,   CURRENCY,   CUSTOMERID,     CUSTOMERMESSAGE,    DELTIME,    DELTOTAL,   DISCOUNT,   DISCOUNTCODE,   
         IP,    ITEMDES,    OPTIONS,    ORDEREDID,  ORDERTOTAL,
         oi.ORDER_ID,   o.ORDER_ID,     PAYMENTTYPE,    PPRICE,     PRODID,     QTY,    REASON,     SECURITYKEY,    SHIPADDRESS1,   
         SHIPADDRESS2,  SHIPADDRESS3,   SHIPCITY,   SHIPCOMPANY,    
         SHIPCOUNTRY,   SHIPCOUNTY,     SHIPMETHOD,
         SHIPNAME,  SHIPPOSTCODE,   STATUS,     STOCKCODE,  SUBTOTAL,   TAX,    TAXABLE,    TIMEDATE,   TXAUTHNO,   VENDORTXCODE,   VPSTXID
         FROM orderedItems oi
         left join orders o on  oi.order_id = o.order_id


    Group by ADMINSTATUS,   CURRENCY,   CUSTOMERID,     CUSTOMERMESSAGE,    DELTIME,    DELTOTAL,   DISCOUNT,   DISCOUNTCODE,   
         IP,    ITEMDES,    OPTIONS,    ORDEREDID,  ORDERTOTAL,
         oi.ORDER_ID,   o.ORDER_ID,     PAYMENTTYPE,    PPRICE,     PRODID,     QTY,    REASON,     SECURITYKEY,    SHIPADDRESS1,   
         SHIPADDRESS2,  SHIPADDRESS3,   SHIPCITY,   SHIPCOMPANY,    
         SHIPCOUNTRY,   SHIPCOUNTY,     SHIPMETHOD,
         SHIPNAME,  SHIPPOSTCODE,   STATUS,     STOCKCODE,  SUBTOTAL,   TAX,    TAXABLE,    TIMEDATE,   TXAUTHNO,   VENDORTXCODE,   VPSTXID
于 2012-08-31T13:58:27.593 に答える
1

PRODID でグループ化しているため、選択リストには PRODID のみが存在する必要があります。選択リストに他の列が必要な場合は、AVG()、MIN() MAX() などの集計関数で指定する必要があります。

テーブルで使用可能なすべての列でグループ化すると、次のようになります。

select distinct * from table

通常、GROUP BY は集計関数で使用され、テーブル内の各グループの MIN、MAX などを取得します。

GROUP BY の例

于 2012-08-31T13:58:59.323 に答える