sql-server - SQL Server 中“With”语句中的列名参数
问题描述
从 Microsoft 在线文档 ( https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15 ),它提到“With”语句可以有一个列名作为参数,然后它说:
“只有在查询定义中提供了所有结果列的不同名称时,列名列表才是可选的。”
“如果在查询定义中提供了所有结果列的不同名称”实际上是什么意思?我经常使用“With”语句,但我从不在参数中指定列名。
我试图浏览整个文档,但似乎没有任何地方对此进行了更详细的解释。
有谁知道在什么情况下我需要指定列名?
提前致谢!
解决方案
很简单,定义 CTE 的查询结果集必须返回一组具有不同名称的列。例如,以下将不起作用:
with cte as (select 1 as x, 2 as x)
select * from cte;
结果集有 2 个名为“x”的列。在这种情况下,您必须在 cte 的定义中提供列名,因为查询会生成具有重复名称的结果集。因此,您需要使用以下表格:
with cte(x, y) as (select 1 as x, 2 as x)
select * from cte;
一般来说,最好的做法是任何结果集都没有重复的列名。
推荐阅读
- amazon-web-services - 部署 CFN 模板时资源之间的竞争条件?
- javascript - 如何使用 Google Sheets 脚本在打开事件中打开模态表单?
- r - 如何将图例定位在左下角并将标题移动到右侧或顶部?
- javascript - 无法通过 HTTP GET 请求存储数据 - 可能是可观察/异步订单问题
- c - C 将 MyType* 的函数转换为 void* 的函数
- sql - 在运行时是否有更清洁(即更快)的方式在 SQL 中进行计算?
- pine-script - “参考长度 max_bars_back”错误的问题
- r - R中的嵌套for循环,其中第二个索引在第一个索引内计数
- python - 从数据帧生成具有不同手段的场景
- javascript - JavaScript 对象在 for 循环中仅存储最新值