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。因为我想concatenate
sday
字段在日程表的当天使用join。这是我的数据库架构,请参阅下面的照片。那么这个更好的方法是什么?
我尝试了 STUFF
这样的函数,但我得到了重复的记录:
【问题讨论】:
工作的不是 STUFF,而是 FOR XML PATH('') 我编辑了我的问题。我希望记录不被复制 不分组怎么获取start_time和end_time?每个医生都会有很多记录。 你能分享一下这里的逻辑吗?该死的我太饱和了 看来您已经对此进行了尝试,并且您的问题总体上看起来确实很有用,但是您以一种相当懒惰的方式提出了问题。你可能认为对你来说更容易只对问题的相关部分进行快照而不是将它们输入到帖子中,但结果是我们很难处理 . (或者也许只是我没有在醒着的每一刻都使用 OCR 软件,以便将它应用到您的插图中以便检索我需要尝试并为您找到答案的文本片段,在这种情况下,我请原谅。) 【参考方案1】:连接查询中的值没有问题。您可以看到自己正确地返回了结果。另外,请注意,连接的不是STUFF()
,而是FOR XML PATH('')
。
因为您在 doctor
和 schedule
之间进行了内部连接,所以您得到了重复的记录。其中一位医生有 4 条记录在日程中。具体来说,start_time
、end_time
和 sstatus
列是问题所在。您可能无法按它们进行分组,因为日程表的每一天的值可能不同。
你可以:
不在查询中返回这些列, 或者也连接这些列。【讨论】:
【参考方案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 函数的主要内容,如果未能解决你的问题,请参考以下文章