2016-07-10 57 views
-3

我有一个效率表具有以下字段SQL集团多列和计算

EmpName Client Sclient BillGrp WkdDate 
KK  Parallon Atlanta IP  12-Jul-16 
KK  Kiwitek Ozark  OP  11-Jul-16 
JJ  Parallon Atlanta OP  10-Jul-16 
JJ  Kiwitek Ozark  IP  11-Jul-16 

我需要的是这样的

EmpName Client BillGrp Count 
KK  Parallon IP  2 
JJ  Parallon OP  2 

总之必须有每个EmpName,只有一个入口具有该EmpName的最大条目的客户端和BillGrp将与计数字段中的总计数一起返回

+0

'选择EmpName,客户端,BillGrp,计数(1)来自...集团EmpName,客户,BillGrp' –

+0

你有试过任何东西吗? – Damon

+0

感谢哥们..它的工作 –

回答

0
SELECT EmpName, Client, BillGrp, COUNT(*) AS `count` 
FROM table 
GROUP BY EmpName 
+0

是的..它工作就像一个魅力..幸运的是我得到它的工作之前,我可以看到你的答案..但是,无论如何感谢..而这里是我的版本的查询..选择最大( (客户名称),max(P.Client),max(P.BillGrp),目标,计数(*)来自生产力P左连接目标T在P.Client = T.Client 其中P.Client = T.Client和P .BillGrp = T.BillGrp组由P.EmpName,T.Target ..我已经映射了来自不同文件的目标.. –

+1

错误对不起,请参阅下面 –

+0

Used_By_Akready如果我不使用group在empname和其他字段..它抛出一个错误.. !!! –

1

您声明这是工作查询,但是您是否看到where子句存在任何问题?您冗余地重复一个连接谓词,而第二个谓词也可以被视为连接的一部分。

如果在group by子句中包含EmpName,请求MAX(EmpName)的要点是什么?

SELECT 
     MAX(EmpName) 
     , MAX(P.Client) 
     , MAX(P.BillGrp) 
     , Target 
     , COUNT(*) 
FROM Productivity P 
     LEFT JOIN Targets T ON P.Client = T.Client 
WHERE P.Client = T.Client 
AND P.BillGrp = T.BillGrp 
GROUP BY 
     P.EmpName 
     , T.Target 

非聚集select子句的列应的组中的由条款(和反之亦然)被列出,即:

SELECT 
     T.Target 
     , MAX(EmpName) 
     , MAX(P.Client) 
     , MAX(P.BillGrp) 
     , COUNT(*) 
FROM Productivity P 
     LEFT JOIN Targets T ON P.Client = T.Client 
          AND P.BillGrp = T.BillGrp 
GROUP BY 
     T.Target