2012-10-11 76 views
3

我遇到了SQL查询。我正在做的SELECT子句中的子查询和DB2提示一个错误-119讲:DB2:Select子句中的子集干涉子查询

"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" 

我不知道如何将在GROUP BY NUMTAGS。我试图在GROUP BY子句中包含BC.ITEM,但没有结果。我不知道如何在网上找到这个,我看到的论坛没有用。

如果有人能解释我如何修补或粘贴一个链接,我可以寻找解决方案,我将不胜感激。

的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 

回答

1

我最后的工作查询是在这里。我觉得我在引用了错误的表格“组中的”或类似的东西:这是在SELECT子句v中包含在GROUP 列BY子句:

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 
2

由于您使用的是标子选择,我不认为你需要或者您的语句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 
+0

我所需要的“集团通过”由于WAREHOUSE_DESTINATION_SECTION表的性质。这个表是另一个之间的连接,我没有限制和过滤结果所需的可变参数,所以我需要“Group by”。 现在事情已经解决了。 – madtyn

3

可以纠正的声明,或者v从SELECT子句中删除列 。

来自:DB2文档。

你需要把ALL选择列在GROUP BY ...