2012-07-24 55 views
1

我想通过子字符串分组。我只得到一个结果:MySQL GROUP BY与子字符串不循环通过

Region = Coastal, Value (R) = 1144900. 

我应该得到2个结果。

这是我的代码:

SELECT 
    DISTINCT SUBSTRING_INDEX(`team_name`, '-', 1) AS 'Region', 
    SUM(`opportunities`.`value`) AS 'Value (R)' 
FROM 
    `opportunities` 
    LEFT JOIN cf_type_link_data ON cf_type_link_data.sourceid = opportunities.id 
    LEFT JOIN cf_lu_type_fields ON cf_type_link_data.fieldid = cf_lu_type_fields.id 
    LEFT JOIN cf_lu_types_fields_dropdown ON cf_type_link_data.`value` = cf_lu_types_fields_dropdown.id AND cf_lu_type_fields.id = cf_lu_types_fields_dropdown.fieldid 
    LEFT JOIN `lu_teams` ON `lu_teams`.`contactid` = `opportunities`.`user_allocation` 
    LEFT JOIN `teams` ON `teams`.`id` = `lu_teams`.`teamid` 
    LEFT JOIN `lu_opportunity_status` ON `lu_opportunity_status`.`id` = `opportunities`.`status` 
WHERE 1 
    AND `cf_lu_types_fields_dropdown`.`values` = 'Building Project' 
    AND cf_lu_type_fields.fieldname = 'Scaffolding Segment' 
    AND (`opportunities`.`expecteddate` >= '2012-01-01' AND `opportunities`.`expecteddate` <= '2012-07-24') 
GROUP BY 'Region' 
ORDER BY cf_lu_types_fields_dropdown.`values`; 

任何帮助表示赞赏。

+0

我们需要查看您的表格数据的示例。 – 2012-07-24 12:51:26

回答

0

不能使用相同的别名从选择中GROUP BY条款

尝试

SELECT DISTINCT SUBSTRING_INDEX(team_name, '-', 1) AS 'Region', 
     SUM(opportunities.value) AS 'Value (R)'.... 

GROUP BY SUBSTRING_INDEX(team_name, '-', 1) 
ORDER BY cf_lu_types_fields_dropdown.values; 
+0

是的,你可以,MySQL允许它,不像SQL Server。 – 2012-07-24 12:51:49

+0

我得到两个结果,但现在的问题是,在沿海这是结果之一,在沿海应该有2个结果(值是903400,但它应该是1144900,因为它缺少另一个结果),但它只得到1 。 – Wesley 2012-07-24 13:04:13

0

尽量不要使用引号中的字段标识符 -

'区' - >区域

在你的情况下,你只能在结果数据集中看到一条记录,因为你按字符串'Region'分组,但你应该按值分组。

+0

如果按价值分组,我仍然得到1个结果。 – Wesley 2012-07-24 13:05:21

+0

然后您的查询返回一个值。检查这个值 - 'SUBSTRING_INDEX('team_name',' - ',1)',检查WHERE条件。 – Devart 2012-07-24 13:42:28

+0

我知道它返回2个值。因为我可以看到结果。上述答案的工作原理除了2个结果中的每个结果都有多个结果,但它只返回1. – Wesley 2012-07-24 14:02:39