当前位置: 首页 > 面试题库 >

此T-SQL代码中发生了什么?(包含SELECT语句的结果)

屈升
2023-03-14
问题内容

我刚刚开始学习T-
SQL,并可以使用一些帮助来了解特定代码块中的情况。我在上一个问题中得到的答案中修改了一些代码,这是有问题的代码:

DECLARE @column_list AS varchar(max) 
SELECT @column_list = COALESCE(@column_list, ',') + 
    'SUM(Case When Sku2=' + CONVERT(varchar, Sku2) + 
    ' Then Quantity Else 0 End) As [' + 
    CONVERT(varchar, Sku2) + ' - ' + 
    Convert(varchar,Description) +'],'
FROM OrderDetailDeliveryReview 
Inner Join InvMast on SKU2 = SKU and LocationTypeID=4
GROUP BY Sku2 , Description
ORDER BY Sku2

Set @column_list = Left(@column_list,Len(@column_list)-1)

Select @column_list

----------------------------------------

1 row is returned:
,SUM(Case When Sku2=157 Then Quantity Else 0 End) As [157 -..., SUM(Case ...

T-SQL代码完全可以实现我想要的功能,即根据查询的结果生成单个结果,然后将其用于另一个查询中。

但是,我无法弄清楚该SELECT @column_list =...语句如何通过位于一条SELECT语句中来将多个值放入单个字符串中。如果没有分配给@column_list,则该SELECT语句将仅返回多行。通过在SELECT语句中包含变量,结果如何被“展平”到一个值中呢?我应该如何阅读此T-
SQL以正确了解正在发生的事情?


问题答案:

在SQL Server中:

SELECT @var = @var + col
FROM TABLE

实际上将这些值连接在一起。这是一种古怪的模式(并且我目前无法找到对功能文档的引用-在SQL
Server社区中已经使用了多年)。如果@var在开始时为NULL(即未初始化的值),则您需要使用COALESCE或ISNULL(并且您经常会使用分隔符):

SELECT @var = ISNULL(@var, '') + col + '|'
FROM TABLE

或用逗号分隔列表,然后仅删除前导逗号:

SELECT @var = ISNULL(@var, '') + ',' + col
FROM TABLE

SET @var = STUFF(@var, 1, 1, '')

或(由KM提供,依赖于NULL+’,’产生NULL来消除列表中第一项对STUFF的需要):

SELECT @var = ISNULL(@var + ',', '') + col
FROM TABLE

或使用以下命令组成一个列表,并以逗号开头和结尾:

SELECT @var = ISNULL(@var, ',') + col + ','
FROM TABLE


 类似资料:
  • 在 T-SQL 中,SELECT 语句用于从数据库表中获取数据,并以结果的形式返回数据。这些表在 SELECT STATEMENT 中称为结果集。 Select语句的语法: 其中 column1、column2、column N 是要获取其值的表的字段。如果获取该表中所有可用的字段,那么需要使用给定的语法—— 例子: 考虑具有以下记录的 CUSTOMERS 表- 以下命令是一个示例,它将获取 CU

  • 在SQL中,语句用于从数据库中的表中查询或检索数据。 返回存储在表中的数据,返回的结果称为结果集。 语法 这里,表达式是要从中选择数据的表的字段名称。使用以下语法选择表中可用的所有字段: 假设表有以下行记录 - EMP_ID EMP_NAME CITY PHONE_NO SALARY 1 Kristen Chicago 9737287378 150000 2 Russell Austin 9262

  • SELECT 语句用于从数据库中选取数据。 SQL SELECT 语句 SELECT 语句用于从数据库中选取数据。 结果被存储在一个结果表中,称为结果集。 SQL SELECT 语法SELECT column_name,column_name FROM table_name; 与SELECT * FROM table_name; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面

  • 问题内容: 我有这个查询,我想选择那个选择的反函数。 有没有简单的方法可以解决我的问题? 问题答案: 只需使用以下查询:

  • T-SQL 中的 DELETE语句用于删除想要从表中删除的记录。使用 WHERE 子句和 DELETE 命令来删除选择要删除的行。如果不指定WHERE条件,那么所有记录会被删除。 语法: 我们使用 AND 或 OR 运算符组合 N 个条件。 例子: 假设 EMPLOYEES 表具有以下记录 - 示例 1: 下面的命令是删除一个 EMPLOYEES 记录的示例,其 ID 为 006 - 在执行上面语

  • T-SQL UPDATE 语句用于修改数据库中的记录。 我们使用 WHERE 子句和 UPDATE 查询来更新特定的行。否则会受到影响到所有行记录。 Update语句的语法: 带有 WHERE 子句的 UPDATE 查询的语法如下: 使用 AND 或 OR 运算符组合 N 个条件。 例子: 假设 EMPLOYEES 表具有以下记录 - 以下命令是一个示例,它将更新 ID 为 6 的客户 ADDRE