【问题标题】:Query to get values and sum of attributes查询以获取值和属性总和
【发布时间】:2015-12-29 13:00:44
【问题描述】:

我正在尝试编写查询,但在查找权重和体积总和时出错: SQL 错误 [8120] [S0001]:列 'Attribute.attribute_value' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。 com.microsoft.sqlserver.jdbc.SQLServerException: 列 'Attribute.attribute_value' 在选择列表中无效,因为它不包含在聚合函数或 GROUP BY 子句中。

  SELECT
    dg.delivery_group_id, 
     ctr.container_type, 
    ven.attribute_value AS 'vendor',
    carr.attribute_value AS 'carrier',
    com.attribute_value AS 'commodity',
    conv.attribute_value AS 'conveyance',
    stor.attribute_value AS 'store',
    SUM(ISNULL(CAST(wgt.attribute_value AS float), 0.0)) AS 'weight',
    SUM(ISNULL(CAST(vol.attribute_value AS float), 0.0)) AS 'volume'

    FROM (SELECT
    pal.container_id AS 'container_id',
    pal.container_type AS container_type,
    cas.container_id AS 'sub_container_id',
    pal.loc_id
    FROM container pal
    LEFT OUTER JOIN container cas
    ON cas.parent_container_id = pal.container_id
    AND cas.container_type = 'Case'
    WHERE pal.container_type = 'Pallet') AS ctr
    INNER JOIN Container_Detail cdtl
    ON (ctr.container_id = cdtl.container_id
    OR ctr.sub_container_id = cdtl.container_id)
   INNER JOIN container_delivery cd
   ON cdtl.detail_id = cd.detail_id 
   INNER JOIN delivery_line dl
   ON cd.delivery_line_id = dl.delivery_line_id
   INNER JOIN delivery_group dg
   ON dl.delivery_group_id = dg.delivery_group_id
   INNER JOIN Attribute ven 
   ON cdtl.attribute_id=ven.attribute_id AND ven.attribute_type='vendor'
   INNER JOIN Attribute carr 
    ON cdtl.attribute_id=carr.attribute_id AND carr.attribute_type='carrier'
   INNER JOIN Attribute com 
    ON cdtl.attribute_id=com.attribute_id AND com.attribute_type='commodity'
   INNER JOIN Attribute conv 
    ON cdtl.attribute_id=conv.attribute_id AND     
    conv.attribute_type='conveyance'   
    INNER JOIN Attribute stor 
    ON cdtl.attribute_id=stor.attribute_id AND stor.attribute_type='store'
    INNER JOIN Attribute wgt 
    ON cdtl.attribute_id=wgt.attribute_id AND wgt.attribute_type='weight'
    INNER JOIN Attribute vol 
    ON cdtl.attribute_id=vol.attribute_id AND vol.attribute_type='volume'
   WHERE ctr.container_id = '00007712120038613557'
    OR ctr.sub_container_id = '00007712120038613557'
     GROUP BY dg.delivery_group_id,    
        ctr.container_type,ctr.container_id,ctr.sub_container_id,    
        wgt.attribute_value, vol.attribute_value

以下是我的表格:

【问题讨论】:

  • 您必须将所有选择列添加到 group by 子句,除了使用内置函数(sum)的列。
  • @SanjayPatel 能否提供您刚才所说的更改的查询

标签: sql-server join


【解决方案1】:

通过以下方式将所有这些添加到您的组中:

group by     dg.delivery_group_id, 
     ctr.container_type, 
    ven.attribute_value AS,
    carr.attribute_value ,
    com.attribute_value AS ,
    conv.attribute_value ,
    stor.attribute_value

【讨论】:

  • 重量和体积呢?
  • 理想情况下,您不需要这 2 个,因为它们包含在 sum 函数中,但如果您按条件分组时遇到错误,请尝试添加这两个以查看它的变化。跨度>
【解决方案2】:
SELECT
    dg.delivery_group_id, 
     ctr.container_type, 
    ven.attribute_value AS 'vendor',
    carr.attribute_value AS 'carrier',
    com.attribute_value AS 'commodity',
    conv.attribute_value AS 'conveyance',
    stor.attribute_value AS 'store',
    SUM(ISNULL(CAST(wgt.attribute_value AS float), 0.0)) AS 'weight',
    SUM(ISNULL(CAST(vol.attribute_value AS float), 0.0)) AS 'volume'

    FROM (SELECT   pal.container_id AS 'container_id',  

      pal.container_type AS container_type,    cas.container_id AS 'sub_container_id',     pal.loc_id    FROM container pal    LEFT OUTER JOIN container cas    ON cas.parent_container_id = pal.container_id
        AND cas.container_type = 'Case'      WHERE pal.container_type = 'Pallet') AS ctr     INNER JOIN Container_Detail cdtl     ON (ctr.container_id = cdtl.container_id     OR ctr.sub_container_id = cdtl.container_id)    INNER JOIN container_delivery cd
       ON cdtl.detail_id = cd.detail_id     INNER JOIN delivery_line dl    ON cd.delivery_line_id = dl.delivery_line_id    INNER JOIN delivery_group dg    ON dl.delivery_group_id = dg.delivery_group_id    INNER JOIN Attribute ven 
       ON cdtl.attribute_id=ven.attribute_id AND ven.attribute_type='vendor'
       INNER JOIN Attribute carr 
        ON cdtl.attribute_id=carr.attribute_id AND carr.attribute_type='carrier'
       INNER JOIN Attribute com 
        ON cdtl.attribute_id=com.attribute_id AND com.attribute_type='commodity'
       INNER JOIN Attribute conv 
        ON cdtl.attribute_id=conv.attribute_id AND     
        conv.attribute_type='conveyance'   
        INNER JOIN Attribute stor 
        ON cdtl.attribute_id=stor.attribute_id AND stor.attribute_type='store'
        INNER JOIN Attribute wgt 
        ON cdtl.attribute_id=wgt.attribute_id AND wgt.attribute_type='weight'
        INNER JOIN Attribute vol 
        ON cdtl.attribute_id=vol.attribute_id AND vol.attribute_type='volume'
       WHERE ctr.container_id = '00007712120038613557'
        OR ctr.sub_container_id = '00007712120038613557'
         group by    
         dg.delivery_group_id, 
         ctr.container_type, 
        ven.attribute_value AS,
        carr.attribute_value ,
        com.attribute_value AS ,
        conv.attribute_value ,
        stor.attribute_value

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多