如何解释查询?

时间:2017-08-25 02:08:41

标签: sql sql-server

假设我有一个名为Employee的表,它有一个名为Courses的列。本专栏有四个记录,分别是“英语”,“数学”,“音乐”,“项目”。所以,我想将这些行合并为一个并用逗号分隔,所以我在网上搜索找到解决方案,我找到了这个:

Declare @Name Varchar(100) = '';
Select  @Name = @Name + ',' + Course
From    Employee;

虽然它有正确的输出,但我仍然无法得到它并想知道结果是如何产生的。具体来说,为什么@Name = @Name +可以将行组合在一起?有人可以向我解释一下吗?

4 个答案:

答案 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,直到完成为止。