使用 Order By 时 COALESCE 出现奇怪的 TSQL 行为 [重复]

2023-12-02

我在合并方面有一些非常奇怪的行为。当我没有指定返回金额(TOP(50))时,我只会得到一个最后结果,但如果我删除“排序依据”,它就会起作用......下面的示例

DECLARE @result varchar(MAX)
SELECT @result = COALESCE(@result + ',', '') + [Title]
FROM Episodes WHERE [SeriesID] = '1480684' AND [Season] = '1' Order by [Episode] ASC
SELECT @result

只会返回一个最后结果:

湿婆碗

但是如果我指定最大返回金额(仅添加TOP (50)相同的声明)

DECLARE @result varchar(MAX)
SELECT TOP(50) @result = COALESCE(@result + ',', '') + [Title]
FROM Episodes WHERE [SeriesID] = '1480684' AND [Season] = '1' Order by [Episode] ASC
SELECT @result

我以正确的顺序得到所有结果

选秀,弹跳测试,周日在如心,先生。麦吉布茨、通常的赌注、湿婆碗

罪魁祸首似乎是 [Title] 列,就好像我返回了一个不同的列,它似乎在没有指定返回限制的情况下工作。仅供参考 [Title] 是一个 VARCHAR(MAX) NOT NULL 列。

有什么见解可能导致此情况吗?我真的不想设置限制,但这是目前返回所有数据的唯一方法......谢谢


你不能依赖像这样的串联:

SELECT @result = COALESCE(@result + ',', '') + [Title]
FROM Episodes
...

聚合串联查询的执行计划和结果取决于表达式位置

取决于 CTE/临时表/执行计划的示例,您将得到不同的结果:

SqlFiddle演示

DECLARE @text VARCHAR(MAX) = ''
       ,@text2 VARCHAR(MAX) = '';

SELECT CAST(ROW_NUMBER() OVER (ORDER BY name) AS INT) AS number 
INTO #numbers 
FROM master..spt_values 


;WITH numbers (number)
AS
(
    SELECT CAST(ROW_NUMBER() OVER (ORDER BY name) AS INT) AS number
    FROM master..spt_values 
),a AS
(
    SELECT number FROM numbers WHERE number < 10
)
SELECT      @text = @text + LTRIM(STR(a.number))
FROM        a
ORDER BY    a.number DESC


;WITH numbers (number)
AS
(
    SELECT number FROM #numbers
),
a
AS
(
    SELECT number FROM numbers WHERE number < 10
)
SELECT      @text2 = @text2 + LTRIM(STR(a.number))
FROM        a
ORDER BY    a.number DESC

SELECT @text, @text2;

我制作了示例,您的第一个查询正在运行SqlFiddle演示。但你的解决方案高度依赖于执行计划。

Use XML + 东西改为串联。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Order By 时 COALESCE 出现奇怪的 TSQL 行为 [重复] 的相关文章

随机推荐

  • 如何修复 IE7 浮动清除组合

    我有一个 field wrapper 类 div 其中包含 3 个子 div field label field input 和 field error 我需要将 field label field input 并排放置 并将 field
  • Canvas/JS:计算倾斜斜坡碰撞中物体的新速度矢量?

    好吧 我正在 JS Canvas 上开发弹球游戏 我想知道如何处理鳍状肢和球之间的碰撞 我可以让脚蹼击球 但我对如何通过不同的脚蹼位置 角度 改变球的速度方向感到困惑 以下是我可以从脚蹼和球中使用的信息 this ballPosX ball
  • Django:管理中的验证错误

    新手警报 背景 这是我第一次编写一个需要验证的模型 我不能有两个Items具有重叠的 日期范围 我一切正常 除了当我引发 forms ValidationError 时 我得到死亡黄屏 debug true 或 500 页 debug fa
  • 如何快速制作不同形状的图像视图

    我想将普通的ios图像视图更改为下面的图像形状 如弧线 您可以使用它来根据您的要求设计形状 您可以向路径添加额外的线条 以防您需要修改贝塞尔曲线路径 创建一个自定义 UIImageView 类 并将故事板中的图像视图子类化为您的自定义类 i
  • 默认最大 Java 堆大小是如何确定的?

    如果我省略 Xmxn来自 Java 命令行的选项 则将使用默认值 根据Java 文档 默认值是在运行时根据系统配置选择的 哪些系统配置设置会影响默认值 在 Windows 上 您可以使用以下命令来查找运行应用程序的系统上的默认值 java
  • 如何使用url参数自动登录网站?

    我有一个链接 如果用户点击该链接 它应该会自动登录该网站 并从该网址读取用户名和密码 因此 用户无需填写用户名字段和密码字段即可查看该站点 url 格式是否正确 如果不正确 正确的格式是什么 我认为你需要的格式是 http 用户名 电子邮件
  • 如何将 MFP 8 Beta 移动应用程序迁移到 MFP 8 GA 版本?

    情况是这样的 我构建了一个与 mfp 8 beta 进行不同集成的应用程序 该应用程序在本地开发服务器上完全运行 并且主要在 Bluemix 上运行 测试期间 该应用程序的所有基本功能均在 MFP 8 Beta 服务器 本地和 Bluemi
  • 使用 yadcf 过滤器导出为 PDF 时标题不正确

    当我尝试使用过滤器 yadcf 将数据表导出为 pdf 时 标题始终显示过滤器中的每个案例 如何隐藏它 我的 JavaScript 是 var vsan vsan DataTable lengthMenu 1 10 40 50 All 10
  • Clojure:try,catch 宏也会关闭任何文件流(不是 with-open)

    UPDATE 感谢迄今为止所有的帮助 这是我的新代码 可以运行 但并不完全如我所愿 我需要它返回java异常 不要问我为什么 例子 safe 1 0
  • 如何取消定时器并更新相同的定时器?

    我正在创建一个每 30 秒振动一次并发出蜂鸣声的应用程序 当我注销时 振动和蜂鸣声必须取消 当我登录时 振动和蜂鸣声应恢复 注意 它必须每 30 秒振动一次并发出蜂鸣声 直到我退出 在我的应用程序中我正在使用TimerTask对于这个实现
  • 当 Swift 桥接头导入导入 Hopscotch-Swift.h 本身的文件时,如何防止循环引用

    我正在将 Swift 集成到一个现有的大型 Objective C 项目中 并且遇到了我认为是循环引用的情况 有问题的类如下 Objective C 控制器 import Hopscotch Swift h interface MyCont
  • Powershell:接收函数返回的数组包含数组中每个值的增量数字[重复]

    这个问题在这里已经有答案了 我是 PowerShell 新手 有一个我无法解释的奇怪行为 我调用一个返回a的函数 System Collections ArrayList 但是当我打印接收数组内容的变量时 如果我有一个值 例如 logXXX
  • 浮点图 - 打开/关闭系列

    我成功地建立了我的流程图 基于上一篇文章 我想让查看者通过单击即可显示 隐藏该系列 我找到了很多解决方案 包括官方的和其他的 但没有一个对我有用 我会解释一下 官方开启 关闭系列 这有效 但看起来非常混乱 因为图例最终被复制了两次 一旦系列
  • 在android中接收和串联超过160个字符的短信

    我正在我的应用程序中开发一个短信接收器模块 在该模块中我正在使用我的应用程序接收短信 如果短信超过 160 个字符 那么我必须将该短信与其下一部分连接起来并显示它 目前我正在使用一个简单的接收器代码 请建议我执行此任务 是的 尝试处理多部分
  • sp1 应用到 SQL Server 2014 后,RESTORE HEADERONLY 出现错误 3013

    我最近将 SP1 应用到 SQL Server 2014 完成并除尘 没有问题 几周后 当尝试使用我的存储过程之一从网络上的 bak 文件恢复数据库之一时 抛出以下错误消息 错误 RESTORE HEADERONLY 异常终止 错误 301
  • 如何仅显示数据中存在的图例中的类别

    我有一个数据框如下 在上面的数据框中 Month 是一个有序的Categorical列定义为 cats January February March April May June July August September October
  • WPF MVVM 将图像控件绑定到资源中的图像

    我的资源中有一个图像 我想根据使用转换器的输入文本字符串显示图像 实现此图像的方法是什么 因为它没有显示在我的应用程序中 在我的转换器 EstateCodetoEstateImageConverter 中我有 return Resource
  • iOS 9 数字键盘中看不到完成按钮的问题

    此代码在 ios 6 7 8 中工作 但在 ios 9 中调用了所有方法 但它不可见 在数字键盘上 这是我的代码 import ViewController h define TAG BUTTON DONE 67125 interface
  • MariaDB:我可以在不使用“AS”的情况下检索重复的列名吗

    我有很多使用的表id作为主键 当我将几张桌子连接在一起并且select 仅显示 id 列之一 使用 MySql 时 解决这个问题的唯一方法是使用SELECT AS 例如SELECT id AS groupId MariaDB 仍然是这种情况
  • 使用 Order By 时 COALESCE 出现奇怪的 TSQL 行为 [重复]

    这个问题在这里已经有答案了 我在合并方面有一些非常奇怪的行为 当我没有指定返回金额 TOP 50 时 我只会得到一个最后结果 但如果我删除 排序依据 它就会起作用 下面的示例 DECLARE result varchar MAX SELEC