假设我有一个名为Employee的表,它有一个名为Courses的列。本专栏有四个记录,分别是“英语”,“数学”,“音乐”,“项目”。所以,我想将这些行合并为一个并用逗号分隔,所以我在网上搜索找到解决方案,我找到了这个:
Declare @Name Varchar(100) = '';
Select @Name = @Name + ',' + Course
From Employee;
虽然它有正确的输出,但我仍然无法得到它并想知道结果是如何产生的。具体来说,为什么@Name = @Name +可以将行组合在一起?有人可以向我解释一下吗?
答案 0 :(得分:0)
变量@name启动空字符串,这很重要,因为如果没有初始化它将是NULL,而NULL加上某些东西是NULL。
Declare @Name Varchar(100) = '';
然后您在此变量中分配其当前值并添加逗号和课程。这种情况发生在每一行
Select @Name = @Name + ',' + Course From Employee;
您还可以指定订单,生成的字符串将与之匹配。
要删除初始逗号,您可以使用
select Stuff(@name, 1, 1, '')
从字符1开始,用空字符替换1个字符
答案 1 :(得分:0)
当您从Employee表中选择时,SQL引擎有一个在幕后运行的内置循环。循环在每一行上运行并添加到自身。
这是一个简化的答案,但希望它有所帮助!
答案 2 :(得分:0)
简而言之,此代码用于从表中创建逗号分隔列表。只需在name
列的每一行的开头添加逗号即可。虽然您在字符串的开头仍然使用逗号,但您可以使用SUBSTRING
函数将其删除。
基于AdventureWorks2014
数据库的示例。
Declare @Name Varchar(100) = ''; Select @Name = @Name + ',' + Name From
Production.Product;
SELECT SUBSTRING(@Name,2,LEN(@Name));
答案 3 :(得分:0)
此查询表示:
Select @Name = @Name + ',' + Course
所有Concatenation
字段值的逗号为{p> Course
。
每次查询获取@name = @name
之前,变量holder
都是course value
,直到完成为止。