在逗号分隔的SQL查询中避免重复值

时间:2019-03-19 06:54:33

标签: sql-server

您好,我这里有一个逗号分隔的查询:

select [Product_Name] 
,(select  h2.Location_name + ', '  from (select distinct * from [dbo].[Product_list]) h2 where h1.Product_Name = h2.Product_Name 
    order by h2.Product_Name for xml path  ('')) as Location_name  
,(select   h2.[Store name] + ', ' from [dbo].[Product_list] h2 where h1.Product_Name = h2.Product_Name 
    order by h2.Product_Name for xml path  ('')) as store_name, sum(Quantity) as Total_Quantity from [dbo].[Product_list] h1 
group by [Product_Name]

但是此查询以逗号分隔形式显示重复的数据,我的问题是我将如何仅以逗号分隔形式显示列的不同值?谁能帮我吗?

1 个答案:

答案 0 :(得分:0)

好吧,如果您不选择DISTINCT * FROM dbo.Product_list,而是选择SELECT DISTINCT location_name FROM dbo.Product_list,那么无论如何,这是您唯一需要的唯一列,它将仅返回不同的值。

  

T-SQL支持使用星号或“星号”(*)来   替代显式列列表。这将检索所有列   从源表。虽然星号适合快速   测试,避免在生产工作中使用它,因为对表进行了更改   将导致查询检索表的所有当前列   当前定义的顺序。这可能会导致错误或其他故障   报告或应用程序期望返回已知数量的列   按照定义的顺序。此外,返回不需要的数据可以   降低查询速度并导致性能问题(如果源   表包含大量行。通过使用显式列   在您的SELECT子句中列出,您将始终实现所需的   结果,条件是表中存在这些列。如果某列是   掉线,您将收到一个错误信息,可帮助您识别问题   并解决您的查询。

     

使用SELECT DISTINCT将筛选出结果集中的重复项。   SELECT DISTINCT指定结果集必须仅包含唯一   行。但是,重要的是要了解DISTINCT选项   仅对SELECT子句返回的一组列进行操作。它   不考虑源中的任何其他唯一列   表。 DISTINCT还可以对SELECT列表中的所有列进行操作,   不只是第一个。

摘自《查询Microsoft SQL Server 2012 MCT手册》。