当前位置: 代码迷 >> Sql Server >> update出现异常, 聚合不应出现在 UPDATE 语句的集合列表中
  详细解决方案

update出现异常, 聚合不应出现在 UPDATE 语句的集合列表中

热度:17   发布时间:2016-04-24 09:23:47.0
update出现错误, 聚合不应出现在 UPDATE 语句的集合列表中

update inspectors
set [熟悉客户1]=MAX(CASE WHEN T2.RN = 1 THEN T2.客户名称 END),
[熟悉客户2]= MAX(CASE WHEN T2.RN = 2 THEN T2.客户名称 END),
[熟悉客户3]=MAX(CASE WHEN T2.RN = 3 THEN T2.客户名称 END),
[独立验货次数]=(SELECT COUNT(验货Leader) + COUNT(兼职Leader)FROM Source WHERE 验货Leader = 中文名 OR 兼职Leader = 中文名),
[合计验货次数]=(SELECT COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1) + COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE 验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名),
[电器验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '电器'),
[电子验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '电子'), 
[日用杂货验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '日用杂货'),  
[纺织验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '纺织'), 
[家装建材验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '家装建材'), 
[运动玩乐验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '运动玩乐'),
[工业品验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '工业品'), 
[机械设备验货次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader) + COUNT(全职Helper1) + COUNT(全职Helper2) + COUNT(全职Helper3) + COUNT(兼职Helper1)+ COUNT(兼职Helper2) + COUNT(兼职Helper3)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 产品大类 = '机械设备'), 
[带领Sorting次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 检验类型 = 'Sorting'),
[带领FA次数]=(SELECT     COUNT(验货Leader) + COUNT(兼职Leader)
                 FROM Source
                 WHERE (验货Leader = 中文名 OR 兼职Leader = 中文名 OR 全职Helper1 = 中文名 OR 全职Helper2 = 中文名 OR 全职Helper3 = 中文名 OR 兼职Helper1 = 中文名 OR 兼职Helper2 = 中文名 OR 兼职Helper3 = 中文名) AND 检验类型 = 'FA'),
[审核报告次数]=(SELECT COUNT(主审) FROM Source WHERE (主审 = 中文名))
FROM inspectors LEFT JOIN
(SELECT * FROM (SELECT 操作员工, 客户名称, COUNT(1) C, ROW_NUMBER() OVER (PARTITION BY 操作员工 ORDER BY COUNT(1) DESC) RN
          FROM (SELECT 客户名称, 操作员工 FROM [Source] 
          UNPIVOT ([操作员工] FOR [TYPE] IN ([验货Leader], [全职Helper1], [全职Helper2], [全职Helper3], [兼职Leader], [兼职Helper1],[兼职Helper2], [兼职Helper3])) U) T
           WHERE 操作员工 IS NOT NULL
           GROUP BY 操作员工, 客户名称) CTE
           WHERE RN <= 3) T2 ON inspectors.中文名 = T2.操作员工
end


出现错误:聚合不应出现在 UPDATE 语句的集合列表中。

原来是用视图写的,没有问题:

SELECT     TOP 100 PERCENT T1.验货员ID, T1.编号, T1.中文名, T1.英文名, T1.归属, T1.状态, T1.类型, T1.区域, T1.省份, T1.城市, 
                      MAX(CASE WHEN T2.RN = 1 THEN T2.客户名称 END) AS 熟悉客户1, MAX(CASE WHEN T2.RN = 2 THEN T2.客户名称 END) AS 熟悉客户2, 
                      MAX(CASE WHEN T2.RN = 3 THEN T2.客户名称 END) AS 熟悉客户3,
....................................................................................

------解决思路----------------------
update T1
SET 列=T2.列
FROM inspectors T1
JOIN 视图 T2 ON T1.唯一值的列=T2.唯一值的列
你建的那个视图和表关联更新
  相关解决方案