首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分t-sql查询的结果不正常。

部分t-sql查询的结果不正常。
EN

Stack Overflow用户
提问于 2016-11-30 14:38:03
回答 2查看 45关注 0票数 1

我有一个有两个列的数据集,TransDateString和TransDate。TransdateString只是Transdate的nvarchar版本,因此数据如下所示:

代码语言:javascript
复制
TransDate | TransDateString
2011-1-4  | 1-2011
2004-6-5  | 6-2004
2010-10-14| 10-2010
2012-7-21 | 7-2012
2010-10-11| 10-2010
2012-7-5  | 7-2012

我要做的是让TransDateString按照TransDate的顺序排列成一个变量:

代码语言:javascript
复制
 SET @cols = STUFF((

        SELECT  ',' + QUOTENAME(A.TransDateString) FROM
        (
            Select c.TransDateString,
               Row_Number() Over (Partition By c.TransDateString Order By c.TransDate asc) RowNum
                FROM #dataSet c
        ) A
        Where RowNum = 1



        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')

这是可行的,但它们是不合理的。在运行时,我得到类似于@cols=[[1-2011],[10-2010],[6-2004],[7-2012]]的东西

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-30 14:44:30

至少在输入数据时,下面的代码为您提供了:

[6-2004],[10-2010],[1-2011],[7-2012]

代码语言:javascript
复制
  DECLARE @DataSource TABLE
 (
    [TransDate] VARCHAR(12)
   ,[TransDateString] VARCHAR(12)
 );

 INSERT INTO @DataSource ([TransDate], [TransDateString])
 VALUES ('2011-1-4', '1-2011')
       ,('2004-6-5', '6-2004')
       ,('2010-10-14', '10-2010')
       ,('2010-10-14', '10-2010')
       ,('2012-7-21', '7-2012')
       ,('2012-7-21', '7-2012');


SELECT 
STUFF((

        SELECT  ',' + QUOTENAME(A.TransDateString) FROM
        (
            Select c.TransDateString
               ,Row_Number() Over (PARTITION BY C.TransDateString Order By c.TransDate asc) RowNum
               ,Row_Number() Over (Order By c.TransDate asc) RowId
                FROM @DataSource c
        ) A
        WHERE RowNUm = 1
        ORDER BY RowId



        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'')
票数 3
EN

Stack Overflow用户

发布于 2016-11-30 15:07:41

Server 2016带来了可以像其他聚合函数一样使用的阿格函数:

代码语言:javascript
复制
SELECT STRING_AGG(TransDateString,',')
FROM #dataSet c
ORDER BY TransDate

Server 2008 R2不再受支持。值得注意的是,Server 2016 SP1提供了曾经是Enterprise的一部分的特性,甚至用于Express和LocalDB:压缩、分区、内存中的表、快照、掩蔽、审计等等。

性能和许可的好处使升级成为一个非常有趣的想法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40891110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档