Sql server 在逗号分隔的sql查询中避免重复值

Sql server 在逗号分隔的sql查询中避免重复值,sql-server,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

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

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]

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

好吧,如果您不从dbo.Product_列表中选择DISTINCT*,而是从dbo.Product_列表中选择DISTINCT location_name,这是您需要的唯一列,它将只返回不同的值

T-SQL支持使用星号或“星形”字符(*)来 替换为显式列列表。这将检索所有列 从源表中。而星号则适用于快速 测试时,避免在生产工作中使用它,因为对表进行了更改 将导致查询检索表的 当前定义的顺序。这可能会导致系统中出现错误或其他故障 需要返回已知列数的报表或应用程序 按规定的顺序。此外,还可以返回不需要的数据 如果源代码错误,则会减慢查询速度并导致性能问题 表包含大量行。通过使用显式列 在SELECT子句中,您将始终实现所需的 结果,前提是表中存在列。如果列是 如果删除,您将收到一个有助于识别问题的错误 并修复您的查询

使用SELECT DISTINCT将过滤掉结果集中的重复项。 SELECT DISTINCT指定结果集必须仅包含unique 排。然而,重要的是要理解,不同的选项 仅对SELECT子句返回的列集进行操作。信息技术 不考虑源中的任何其他唯一列 桌子DISTINCT还对选择列表中的所有列进行操作, 不仅仅是第一个


来自查询Microsoft SQL Server 2012 MCT手册。

好的,如果您不从dbo.Product_列表中选择DISTINCT*而从dbo.Product_列表中选择DISTINCT location_name,则它将只返回不同的值

T-SQL支持使用星号或“星形”字符(*)来 替换为显式列列表。这将检索所有列 从源表中。而星号则适用于快速 测试时,避免在生产工作中使用它,因为对表进行了更改 将导致查询检索表的 当前定义的顺序。这可能会导致系统中出现错误或其他故障 需要返回已知列数的报表或应用程序 按规定的顺序。此外,还可以返回不需要的数据 如果源代码错误,则会减慢查询速度并导致性能问题 表包含大量行。通过使用显式列 在SELECT子句中,您将始终实现所需的 结果,前提是表中存在列。如果列是 如果删除,您将收到一个有助于识别问题的错误 并修复您的查询

使用SELECT DISTINCT将过滤掉结果集中的重复项。 SELECT DISTINCT指定结果集必须仅包含unique 排。然而,重要的是要理解,不同的选项 仅对SELECT子句返回的列集进行操作。信息技术 不考虑源中的任何其他唯一列 桌子DISTINCT还对选择列表中的所有列进行操作, 不仅仅是第一个

来自查询Microsoft SQL Server 2012 MCT手册