ORDER BY子句中的列无效,因为它不包含在聚合函数或GROUP BY子句中

时间:2013-01-17 13:29:43

标签: sql join view

好的,这是我的观点(vw_LiftEquip)

SELECT  dbo.tbl_equip_swl_unit.unit_id,
        dbo.tbl_equip_swl_unit.unit_name,
        dbo.tbl_equip_swl_unit.archived,
        dbo.tbl_categories.category_id,
        dbo.tbl_categories.categoryName,
        dbo.tbl_categories.parentCategory,
        dbo.tbl_categories.sub_category,
        dbo.tbl_categories.desc_category,
        dbo.tbl_categories.description,
        dbo.tbl_categories.miscellaneous,
        dbo.tbl_categories.category_archived,
        dbo.tbl_equip_swl_unit.unit_name AS Expr1,
        dbo.tbl_categories.categoryName AS Expr2,
        dbo.tbl_categories.description AS Expr3,
        dbo.tbl_equip_depts.dept_name,
        dbo.tbl_equip_man.man_name,
        dbo.tbl_Lifting_Gear.e_defects AS Expr7,
        dbo.tbl_Lifting_Gear.e_defects_desc AS Expr8,
        dbo.tbl_Lifting_Gear.e_defects_date AS Expr9,
        dbo.tbl_equipment.equipment_id,
        dbo.tbl_equipment.e_contract_no,
        dbo.tbl_equipment.slID,
        dbo.tbl_equipment.e_entered_by,
        dbo.tbl_equipment.e_serial,
        dbo.tbl_equipment.e_model,
        dbo.tbl_equipment.e_description,
        dbo.tbl_equipment.e_location_id,
        dbo.tbl_equipment.e_owner_id,
        dbo.tbl_equipment.e_department_id,
        dbo.tbl_equipment.e_manafacture_id,
        dbo.tbl_equipment.e_manDate1,
        dbo.tbl_equipment.e_manDate2,
        dbo.tbl_equipment.e_manDate3,
        dbo.tbl_equipment.e_dimensions,
        dbo.tbl_equipment.e_test_no,
        dbo.tbl_equipment.e_firstDate1,
        dbo.tbl_equipment.e_firstDate2,
        dbo.tbl_equipment.e_firstDate3,
        dbo.tbl_equipment.e_prevDate1,
        dbo.tbl_equipment.e_prevDate2,
        dbo.tbl_equipment.e_prevDate3,
        dbo.tbl_equipment.e_insp_frequency,
        dbo.tbl_equipment.e_swl,
        dbo.tbl_equipment.e_swl_unit_id,
        dbo.tbl_equipment.e_swl_notes,
        dbo.tbl_equipment.e_cat_id,
        dbo.tbl_equipment.e_sub_id,
        dbo.tbl_equipment.e_parent_id,
        dbo.tbl_equipment.e_last_inspector,
        dbo.tbl_equipment.e_last_company,
        dbo.tbl_equipment.e_deleted AS Expr11,
        dbo.tbl_equipment.e_deleted_desc AS Expr12,
        dbo.tbl_equipment.e_deleted_date AS Expr13,
        dbo.tbl_equipment.e_deleted_insp AS Expr14,
        dbo.tbl_Lifting_Gear.e_defects_action AS Expr15,
        dbo.tbl_equipment.e_rig_location,
        dbo.tbl_Lifting_Gear.e_add_type AS Expr17,
        dbo.tbl_Lifting_Gear.con_id,
        dbo.tbl_Lifting_Gear.lifting_date,
        dbo.tbl_Lifting_Gear.lifting_ref_no,
        dbo.tbl_Lifting_Gear.e_id,
        dbo.tbl_Lifting_Gear.inspector_id,
        dbo.tbl_Lifting_Gear.lift_testCert,
        dbo.tbl_Lifting_Gear.lift_rig_location,
        dbo.tbl_Lifting_Gear.inspected,
        dbo.tbl_Lifting_Gear.lifting_through,
        dbo.tbl_Lifting_Gear.liftingNDT,
        dbo.tbl_Lifting_Gear.liftingTest,
        dbo.tbl_Lifting_Gear.e_defects,
        dbo.tbl_Lifting_Gear.e_defects_desc,
        dbo.tbl_Lifting_Gear.e_defects_date,
        dbo.tbl_Lifting_Gear.e_defects_action,
        dbo.tbl_Lifting_Gear.lift_department_id,
        dbo.tbl_Lifting_Gear.lifting_loc
FROM    dbo.tbl_equipment
        INNER JOIN dbo.tbl_equip_swl_unit
                ON dbo.tbl_equipment.e_swl_unit_id = dbo.tbl_equip_swl_unit.unit_id
        INNER JOIN dbo.tbl_categories
                ON dbo.tbl_equipment.e_cat_id = dbo.tbl_categories.category_id
        INNER JOIN dbo.tbl_equip_depts
                ON dbo.tbl_equipment.e_department_id = dbo.tbl_equip_depts.dept_id
        INNER JOIN dbo.tbl_equip_man
                ON dbo.tbl_equipment.e_manafacture_id = dbo.tbl_equip_man.man_id
        INNER JOIN dbo.vwSubCategory
                ON dbo.tbl_equipment.e_sub_id = dbo.vwSubCategory.category_id
        INNER JOIN dbo.vwDescCategory
                ON dbo.tbl_equipment.e_cat_id = dbo.vwDescCategory.category_id
        INNER JOIN dbo.tbl_Lifting_Gear
                ON dbo.tbl_equipment.equipment_id = dbo.tbl_Lifting_Gear.e_id

这是我正在使用的子查询的select语句:

SELECT  *
FROM    vw_LiftEquip
WHERE   lifting_loc = ? AND 
        con_id = ? AND 
        EXPR11 = 
        'N'(
                SELECT MAX(lifting_date) AS maxLift
                FROM vw_LiftEquip
                WHERE e_id = equipment_id
            )
ORDER BY    lifting_ref_no,
            category_id,
            e_swl,
            e_serial

我收到错误: 列“vw_LiftEquip.category_id”在ORDER BY子句中无效,因为它不包含在聚合函数或GROUP BY子句中。

无法理解为什么它会返回该错误,这无疑是我第一次在这样一个复杂的视图上运行子查询,而且我有点迷茫,提前感谢任何帮助。我查看了类似的帖子,找不到这个帖子的答案,对不起,如果我只是愚蠢。

1 个答案:

答案 0 :(得分:6)

ANDEXPR11 = 'N'之间缺少(SELECT MAX(...

否则,它看起来不错。 MAX without GROUP BY is allowed如果SELECT

中没有其他列

更新:@hvd还注意到您无法与MAX(lifting_date).进行比较。请参阅评论

更新2,

SELECT  *
FROM    vw_LiftEquip v1
        CROSS JOIN
        (
             SELECT MAX(lifting_date) AS maxLift
             FROM vw_LiftEquip
             WHERE e_id = equipment_id
        ) v2
WHERE   v1.lifting_loc = ? AND 
        v1.con_id = ? AND 
        v1.EXPR11 = 'N'
ORDER BY    v1.lifting_ref_no,
            v1.category_id,
            v1.e_swl,
            v1.e_serial