您好,我这里有一个逗号分隔的查询:
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]
但是此查询以逗号分隔形式显示重复的数据,我的问题是我将如何仅以逗号分隔形式显示列的不同值?谁能帮我吗?
答案 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手册》。