Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在没有聚合的情况下进行轴心转换_Sql Server - Fatal编程技术网

Sql server 如何在没有聚合的情况下进行轴心转换

Sql server 如何在没有聚合的情况下进行轴心转换,sql-server,Sql Server,我一直在这个网站和谷歌上阅读关于如何调整我的数据,但似乎不太明白。我希望能够在不进行任何聚合的情况下进行轴心转换。我的数据目前看起来像。我的sql是: select act, rn from ##Temp_Outage_Crew order by act act rn 00208763-BC2 AUXO01 00208763-BC2 AUXO03 但我希望它看起来像下面所示。我现在有了一种方法来透视这些数据,但我无法让它工作 act rn1

我一直在这个网站和谷歌上阅读关于如何调整我的数据,但似乎不太明白。我希望能够在不进行任何聚合的情况下进行轴心转换。我的数据目前看起来像。我的sql是:

select act, rn
from ##Temp_Outage_Crew
order by act

act         rn
00208763-BC2    AUXO01
00208763-BC2    AUXO03
但我希望它看起来像下面所示。我现在有了一种方法来透视这些数据,但我无法让它工作

act             rn1        rn2
00208763-BC2    AUXO01     AUX03

我已“尝试”使用“行数”功能,但似乎也无法使其正常工作。

如评论中所述,您必须在
透视中使用聚合
MAX
适用于字符串,因此,当您有一对一的关系时,它是一个很好的选择

要获取任意
rn1
rn2
列,使用ROW_NUMBER()是有意义的。假设您知道特定
act
值的
rn
最大值,您可以执行以下操作:

;WITH toc_CTE
     AS (SELECT [act],
                [rn],
                [RowNum] = CONCAT('rn', ROW_NUMBER()
                                          OVER (
                                            PARTITION BY [act]
                                            ORDER BY [rn]))
         FROM   #Temp_Outage_Crew)
SELECT [act],
       [rn1],
       [rn2],
       [rn3],
       [rn4]
FROM   toc_CTE
       PIVOT (MAX([rn])
             FOR [RowNum] IN ([rn1],
                              [rn2],
                              [rn3],
                              [rn4])) pvt 

但是,如果对每个
act
rn
值的数量没有具体限制,那么您将不得不使用

不聚合的唯一原因是当只有价值时;在这种情况下,对该值使用
max
函数将返回该值;因此,尽管您使用了聚合,但您还是会得到您想要的结果。可能是它的重复。我就是搞不懂查询语法。我尝试了多种变体,但运气不好,但上面的语法非常有效。非常感谢你@Lisa欢迎来到Stack Overflow。如果这个答案令人满意地解决了你的问题,请考虑使用分数旁边的复选标记“接受”它。这让网站上的其他用户知道这个问题有一个可行的解决方案。