3

私はSQLクエリで立ち往生しています。select句でサブクエリを作成していますが、db2は次のような-119エラーを表示します。

"An expression starting with "FACILITY_ID" specified in a SELECT clause, HAVING clause, or ORDER BY clause is not specified in the GROUP BY clause or it is in a SELECT clause, HAVING clause, or ORDER BY clause with a column function and no GROUP BY clause is specified. SQL Code: -119, SQL State: 42803"

NUMTAGSをGROUPBYに含める方法がわかりません。BC.ITEMをGROUPBY句に含めようとしましたが、結果がありませんでした。Webでこれを正確に探す方法がわかりません。また、私が調べたフォーラムは役に立ちませんでした。

誰かが私にこれを修復する方法を説明したり、私が解決策を探すことができるリンクを貼り付けたりすることができれば、私は感謝するでしょう。

SQLクエリはDB2を使用しており、ここにあります。

SELECT SS.NAME, B.DESTINATION_ID, P.DESCRIPTION, B.LAST_READ_DATE, B.LABEL, 
        (SELECT COUNT(BC.ITEM) 
        FROM PROJECT_DB.BOX_CONTENT BC
        WHERE BC.FACILITY_ID = B.FACILITY_ID
        AND BC.BOX_ID = B.BOX_ID
        GROUP BY BC.ITEM) AS NUMTAGS,
        B.BOX_ID
FROM PROJECT_DB.BOX B
INNER JOIN MAINDB.DESTINATION P ON B.DESTINATION_ID = P.DESTINATION_ID
INNER JOIN MAINDB.WAREHOUSE_DESTINATION_SECTION WH 
                                ON B.DESTINATION_ID = WH.DESTINATION_ID
                                AND B.WAREHOUSE_ID = WH.WAREHOUSE_ID
INNER JOIN MAINDB.SECTION S ON S.SECTION = WH.SECTION   
                            AND S.SECTION_TYPE = B.SECTION_TYPE
INNER JOIN MAINDB.DESTINATION_SET SS 
                            ON SS.DESTINATION_SET_ID = S.DESTINATION_SET_ID
WHERE B.WAREHOUSE_ID = 100
GROUP BY B.BOX_ID, B.FACILITY_ID, B.DESTINATION_ID, B.LAST_READ_DATE, B.LABEL, P.DESCRIPTION, SS.NAME
4

3 に答える 3

3

ステートメントを訂正するには、次のようにします。vSELECT文節にあるGROUPBY文節の列を含めるか、vSELECT文節から列を削除します。

From:DB2ドキュメント。

選択したすべての列をGROUPBY...に配置する必要があります。

于 2013-04-29T17:49:36.000 に答える
1

GROUP BYスカラー副選択を使用しているので、どちらのステートメントにも句は必要ないと思います。これを試して:

SELECT 
    SS.NAME,
    B.DESTINATION_ID,
    P.DESCRIPTION,
    B.LAST_READ_DATE,
    B.LABEL,

    (SELECT COUNT(BC.ITEM)
     FROM PROJECT_DB.BOX_CONTENT BC
     WHERE BC.FACILITY_ID = B.FACILITY_ID
     AND BC.BOX_ID = B.BOX_ID
    ) AS NUMTAGS,

    B.BOX_ID
FROM PROJECT_DB.BOX B
JOIN MAINDB.DESTINATION P
  ON B.DESTINATION_ID = P.DESTINATION_ID
JOIN MAINDB.WAREHOUSE_DESTINATION_SECTION WH
  ON B.DESTINATION_ID = WH.DESTINATION_ID
 AND B.WAREHOUSE_ID = WH.WAREHOUSE_ID
JOIN MAINDB.SECTION S 
  ON S.SECTION = WH.SECTION
 AND S.SECTION_TYPE = B.SECTION_TYPE
JOIN MAINDB.DESTINATION_SET SS
  ON SS.DESTINATION_SET_ID = S.DESTINATION_SET_ID
WHERE B.WAREHOUSE_ID = 100
于 2012-10-11T15:33:04.670 に答える
1

私の最後の作業クエリはここにあります。「groupby」などで間違ったテーブルが参照されていたと思います。

SELECT SS.NAME, P.DESTINATION_ID, P.DESCRIPTION, B.LAST_READ_DATE, B.LABEL, 
        (SELECT COUNT(BC.ITEM) 
        FROM PROJECT_DB.BOX_CONTENT BC
        WHERE BC.ID_FACILITY = B.ID_FACILITY
        AND BC.ID_BOX = B.ID_BOX
        GROUP BY BC.ITEM) AS NUMTAGS, 
        B.BOX_ID, B.FACILITY_ID
FROM PROJECT_DB.BOX B
    INNER JOIN MAINDB.DESTINATION P ON B.DESTINATION_ID = P.DESTINATION_ID
    INNER JOIN MAINDB.WAREHOUSE_DESTINATION_SECTION WH 
                                    ON WH.WAREHOUSE_ID = B.WAREHOUSE_ID 
                                    AND WH.ID_DESTINATION = B.ID_DESTINATION
    INNER JOIN MAINDB.SECTION S ON S.SECTION = WH.SECTION
                                AND S.SECTION_TYPE = B.SECTION_TYPE
    INNER JOIN MAINDB.DESTINATION_SET SS ON SS.DESTINATION_SET_ID = S.DESTINATION_SET_ID
WHERE B.WAREHOUSE_ID = 100
GROUP BY B.BOX_ID, B.FACILITY_ID, P.DESTINATION_ID, B.LAST_READ_DATE, B.LABEL, P.DESCRIPTION, SS.NAME
WITH UR 
于 2012-10-26T14:55:29.123 に答える