在不使用聚合函数的情况下,我们可以在 sql 中进行数据透视

尼兰詹
  SELECT 'CFS to Zero' Location, [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],              
[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]  FROM                 
(SELECT  Trailer_RegNo,Time FROM #tt )as Tab1                
PIVOT                
(                
max(Trailer_RegNo) FOR Time IN ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],              
[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23])) AS Tab2 

对于上述查询,我​​正在获取仅返回 1 行的数据。图片附在下面 在此处输入图片说明

但我需要多行作为下表的结果 在此处输入图片说明

我需要一个输出

Location    0        1       2       3       4       5      6       7       8        9        10         11       12        13          14          15              16     17       18        19         20      21       22       23
CFS to Zero NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL        NULL    KA108112    TN52C4788   TN04AH3243  TN04AB6915  TN03H9079   NULL    NULL    NULL    NULL    NULL    NULL    NULL
 CFS to Zero    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL        NULL    KA108112    TN28C3709   TN04AK3631  TN04J6646   TN04AE7461  NULL    NULL    NULL    NULL    NULL    NULL    NULL
etc
加雷斯博士

不,PIVOT没有聚合函数是不可能的,但是您可以通过确保每组只有一个源行来任意设置聚合函数。从您的问题中并不能立即清楚您的逻辑是什么:

例如,您有两个值表示时间为 12 (KA108112KA106360),有 3 行表示时间为 13 ( TN04F6726, TN28C3709, TN52C4788),因此您可以通过几种不同的方式将这两者结合起来。

您可以返回笛卡尔积:

12          13
----------------------
KA108112    TN04F6726
KA106360    TN04F6726
KA108112    TN28C3709
KA106360    TN28C3709
KA108112    TN52C4788
KA106360    TN52C4788

或者你可以返回每个结果一次,例如

12          13
----------------------
KA106360    TN04F6726
KA108112    TN28C3709
NULL        TN52C4788

但是您还需要提供额外的逻辑,即为什么会KA106360匹配TN04F6726, 而不是其他两个值中的任何一个(在上面的示例中,我每次都按字母顺序排列 ordererd Trailer_RegNo,但可能有多种方法可以做到这一点。

根据您的评论,您似乎想要任意配对值,因此为了确保表示每个值,您需要使每一行都是唯一的,您可以使用ROW_NUMBER(),例如

DECLARE @T TABLE (Time INT, Trailer_RegNo VARCHAR(20));
INSERT @T (Time, Trailer_RegNo)
VALUES (12, 'KA108112'), (12, 'KA106360'), (13, 'TN04F6726'), (13, 'TN28C3709'), (13, 'TN52C4788');

SELECT  Trailer_RegNo, 
        Time,
        RowNumber = ROW_NUMBER() OVER(PARTITION BY [Time] ORDER BY Trailer_RegNo) 
FROM    @T;

这使:

Trailer_RegNo   Time    RowNumber
----------------------------------
KA106360        12      1
KA108112        12      2
TN04F6726       13      1
TN28C3709       13      2
TN52C4788       13      3

现在您可以配对您的物品(即 KA106360 和 TN04F6726、KA108112 和 TN28C3709 等)。要更改项目的分组方式,您只需更改函数中ORDER BY子句ROW_NUMBER()

所以你的最终查询可能是这样的:

DECLARE @T TABLE (Time INT, Trailer_RegNo VARCHAR(20));
INSERT @T (Time, Trailer_RegNo)
VALUES (12, 'KA108112'), (12, 'KA106360'), (13, 'TN04F6726'), (13, 'TN28C3709'), (13, 'TN52C4788'),
        (14, 'KA108112'), (15, 'KA106360'), (15, 'TN04F6726'), (1, 'TN28C3709'), (0, 'TN52C4788');

SELECT  'CFS to Zero' Location, 
        [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],              
        [13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]
FROM    (   SELECT Trailer_RegNo, 
                    Time,
                    RowNumber = ROW_NUMBER() OVER(PARTITION BY [Time] ORDER BY Trailer_RegNo) 
            FROM    @T 
        ) AS Tab1                
        PIVOT                
        (   MAX(Trailer_RegNo) 
            FOR [Time] IN 
            (   [0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],              
                [13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]
            )
        ) AS Tab2;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用where子句在SQL Server中进行数据透视

在SQL上使用分组依据进行数据透视

使用动态SQL语句进行数据透视

我们可以在没有 Management Studio 的情况下对 SQL Server .MDF 文件进行 CRUD 操作吗?

在SQL Server中进行数据透视时获取自定义列名称

如何在不了解T-SQL中固定列的情况下进行数据透视

我们可以在不使用 selenium/QTP 等的情况下进行网络自动化吗?

我们可以在不使用GCM / FCM的情况下以chrome形式进行网络推送通知吗?

使用SQL Server 2008 R2进行数据透视表查询

在SQL Server中使用交叉和联合CTE进行数据透视

Oracle SQL - 如何使用两个表进行数据透视并比较记录

如何使用aggfunc'min'在dask中进行数据透视表?

我们如何在不使用插入子句的情况下插入数据?

在 SQL Server 中,是否可以在没有聚合的情况下对行进行透视?

如何在不进行聚合的情况下进行数据透视,这可能吗?

我们可以在没有OAuth的情况下使用Google youtube数据API吗?

我们可以在不部署的情况下使用多维数据集吗?

SQL 在不使用 Oracle Pivot 子句的情况下创建数据透视表

当我们单击注销时,如果我们在不使用数据库的情况下检查记忆,则必须记住用户名

如何在不使用 python 中的枢轴的情况下转换我们的数据框?

SQL Server在多个列上进行数据透视

使用两个聚合列进行数据透视

使用Python Pandas处理数据并进行数据透视

我们可以在不实现IEnumerable的情况下使用Linq根据其ID对类进行排序吗

在这种特定情况下,我们可以使用android数据绑定替换findViewById()吗?

如何在Access SQL中进行转换/透视但不进行聚合?

使用Pandas进行数据透视后如何访问索引

熊猫:如何使用多索引进行数据透视?

在PostgreSQL中使用row_number()进行数据透视