0

我在 MySQL 数据库上使用了 sql 查询:

SELECT 
  DISTINCT Sp_Name,
  CONCAT('SP_',Sp_Id) AS searchPayerId
FROM  
  ServiceProviders 
WHERE 
  Comp_Id= 3 
  AND Sp_Id NOT IN (1,2)
  AND Sp_Name != ''
GROUP BY 
  Sp_Id

我仍然得到关注输出。为什么这个重复的'001 Towing'?

Sp_Name                                 searchPayerId
-----------------------------------------------------
#1 24 Hour Emergency Towing                SP_50094
'Triple T' Pts&Equip/Warsaw                SP_65699
0 00 Anytime Towing                        SP_50095
0 00 Anywhere Towing                   SP_50096
001 Towing                                 SP_50097
001 Towing                                 SP_50098
001 Towing                                 SP_50099
001 Towing                                 SP_50100
1 - 800 - Tow - Help Inc.                  SP_55040
1 2 3 Towing                           SP_27761
1 24 Hour Affordable Towing                SP_50101

我想获得以下输出:

   Sp_Name                              searchPayerId

-----------------------------------------------------
#1 24 Hour Emergency Towing                SP_50094
'Triple T' Pts&Equip/Warsaw                SP_65699
0 00 Anytime Towing                        SP_50095
0 00 Anywhere Towing                   SP_50096
001 Towing                                 SP_50097_50098_50099_50100
1 - 800 - Tow - Help Inc.                  SP_55040
1 2 3 Towing                           SP_27761
1 24 Hour Affordable Towing                SP_50101

我怎么才能得到它?

4

2 回答 2

1

您正在使用GROUP BYwithSp_IdDISTINCTSp_Name 您必须GROUP BY使用Sp_Name类似的结果

SELECT 
DISTINCT Sp_Id,
Sp_Name,
CONCAT('SP_',Sp_Id) AS searchPayerId
FROM  
ServiceProviders 
WHERE 
Comp_Id= 3 
AND Sp_Id NOT IN (1,2)
AND Sp_Name != ''
GROUP BY 
Sp_Name

Sql Fiddle 希望它有意义

于 2013-06-20T10:14:00.523 回答
1

您没有得到重复的“001 Towing”,不同的是应用于 group by 子句生成的每个组。因此,每个“Sp_Id”获得 4 个“001 Towing”;如果您删除该组,您将只获得一个“001 Towing”。

你向数据库提出了错误的问题,而数据库给了你错误问题的正确答案。如果您告诉我们查询应该做什么,我们也许可以帮助您修复它...


对于您的新规范,请尝试此查询,它应该可以解决问题:

SELECT 
  Sp_Name as Sp_Name,
   CONCAT('SP_', **group_concat ( Sp_Id separator '_ ' )** ) as searchPayerId
FROM  
  ServiceProviders 
WHERE 
  Comp_Id= 3 
  AND Sp_Id NOT IN (1,2)
  AND Sp_Name != ''
**GROUP BY 
  Sp_Name**

顺便说一句,您可以在 mySQL 手册中查看Group By的工作原理,以及group_concat ...

于 2013-06-20T10:03:33.277 回答