我正在使用SQL Server 2012,并试图使用一个Case When Group By查询。结果给我在ProdType字段重复值。我知道这与我的分组条款有关。我的查询是:CASE什么时候GROUP BY返回重复值
SELECT
CASE WHEN dbo.tblPayCode.PayCode IN (10,11,12,13,14,15,16,20,21,22,23,24,25,26,30,31,32,33,34,35,36) THEN 'WORK'
WHEN dbo.tblPayCode.PayCode > 39 AND dbo.tblPayCode.PayCode NOT IN (40,43,57,58,59,67,68,72,75,78,79) THEN 'SVLA'
END AS ProdType,
dbo.tblJobsWorked.WrkDate, SUM(dbo.tblJobsWorked.Hours) AS TotalHours
FROM dbo.tblEmployees INNER JOIN
dbo.tblJobsWorked ON dbo.tblEmployees.EMP_NUMB = dbo.tblJobsWorked.EMP_NUMB INNER JOIN
dbo.tblPayCode ON dbo.tblJobsWorked.PayCode = dbo.tblPayCode.PayCode INNER JOIN
dbo.tblCostCenters ON dbo.tblEmployees.CC_ORGN_NUMB = dbo.tblCostCenters.CC_C_NB AND
dbo.tblEmployees.ORGN_DEPT_TYP_C = dbo.tblCostCenters.DEPT_TYP_C AND dbo.tblJobsWorked.CC_RSPB_NUMB = dbo.tblCostCenters.CC_C_NB AND
dbo.tblJobsWorked.RSPB_DEPT_TYP_C = dbo.tblCostCenters.DEPT_TYP_C
GROUP BY
dbo.tblPayCode.PayCode, dbo.tblJobsWorked.WrkDate
HAVING dbo.tblJobsWorked.WrkDate>'2013-04-30'
ORDER BY dbo.tblJobsWorked.WrkDate
我的结果是
ProdType WrkDate TotalHours
WORK 2013-05-01 00:00:00.000 58.70
WORK 2013-05-01 00:00:00.000 5.20
SVLA 2013-05-01 00:00:00.000 8.00
SVLA 2013-05-01 00:00:00.000 8.00
WORK 2013-05-01 00:00:00.000 68.00
WORK 2013-05-01 00:00:00.000 825.40
WORK 2013-05-01 00:00:00.000 8.90
SVLA 2013-05-01 00:00:00.000 21.00
SVLA 2013-05-01 00:00:00.000 8.00
SVLA 2013-05-01 00:00:00.000 8.00
WORK 2013-05-01 00:00:00.000 5.30
SVLA 2013-05-01 00:00:00.000 53.00
SVLA 2013-05-01 00:00:00.000 8.60
我期待看到13年5月1日与“工作”和“SVLA”及其相应的时间总共2行。非常感谢您的帮助!谢谢
我做了一个好办法,以这和它的工作。 ORDER BY子句必须在子查询之外。感谢@Rahul的帮助 – niemoy