CROSS APPLY VS STUFF 函数

Posted

技术标签:

【中文标题】CROSS APPLY VS STUFF 函数【英文标题】:CROSS APPLY VS STUFF Function 【发布时间】:2014-03-13 04:16:26 【问题描述】:

我正在 SQL Server 中搜索 GROUP_CONCAT 等效函数,我发现这两个选项是 CROSS APPLY 和 STUFF。因为我想concatenatesday字段在日程表的当天使用join。这是我的数据库架构,请参阅下面的照片。那么这个更好的方法是什么?

我尝试了 STUFF 这样的函数,但我得到了重复的记录:

【问题讨论】:

工作的不是 STUFF,而是 FOR XML PATH('') 我编辑了我的问题。我希望记录不被复制 不分组怎么获取start_time和end_time?每个医生都会有很多记录。 你能分享一下这里的逻辑吗?该死的我太饱和了 看来您已经对此进行了尝试,并且您的问题总体上看起来确实很有用,但是您以一种相当懒惰的方式提出了问题。你可能认为对你来说更容易只对问题的相关部分进行快照而不是将它们输入到帖子中,但结果是我们很难处理 . (或者也许只是我没有在醒着的每一刻都使用 OCR 软件,以便将它应用到您的插图中以便检索我需要尝试并为您找到答案的文本片段,在这种情况下,我请原谅。) 【参考方案1】:

连接查询中的值没有问题。您可以看到自己正确地返回了结果。另外,请注意,连接的不是STUFF(),而是FOR XML PATH('')

因为您在 doctorschedule 之间进行了内部连接,所以您得到了重复的记录。其中一位医生有 4 条记录在日程中。具体来说,start_timeend_timesstatus 列是问题所在。您可能无法按它们进行分组,因为日程表的每一天的值可能不同。

你可以:

不在查询中返回这些列, 或者也连接这些列。

【讨论】:

【参考方案2】:

您可能希望在 MSDN 上查看以下关于 Group Concat 函数的帖子 http://social.msdn.microsoft.com/Forums/sqlserver/en-US/f09d4166-2030-41fe-b86e-392fbc94db53/tsql-equivalent-for-groupconcat-function?forum=transactsql

这四个条目是因为日程表必须在星期一、星期二、星期三和星期四有四个条目。检查您已应用的内部联接。

【讨论】:

另外,在上面的查询中连接是可以的,问题出在其他地方。 四个条目是因为日程表必须有四个条目星期一、星期二、星期三和星期四。检查您已应用的内部联接。 请把它写在你的答案中。

以上是关于CROSS APPLY VS STUFF 函数的主要内容,如果未能解决你的问题,请参考以下文章

具有表值函数限制性能的 CROSS APPLY

cross apply 和 outer apply

为啥 CROSS APPLY 与列和聚合函数需要 Group by

CROSS APPLY和 OUTER APPLY 区别详解

CROSS APPLY和 OUTER APPLY 区别详解

如何在 BigQuery 中使用 SPLIT 和 CROSS APPLY 函数