【问题标题】:TSQL Pivot with group byTSQL Pivot 与 group by
【发布时间】:2018-02-23 08:48:26
【问题描述】:

我正在使用 PIVOT 子句来转换这些数据:

ComponenteID Descripcion                              PosicionID  Email                                                        Nivel
------------ ---------------------------------------- ----------- ------------------------------------------------------------ -----
9            Maquinaria                               19          monica.rodriguez@definity.com                           1
9            Maquinaria                               19          monica.rodriguez@definity.com                           2
9            Maquinaria                               19          monica.rodriguez@definity.com                           3
9            Maquinaria                               150         fulano.detal@definityfirst.com                               1

收件人:

TipoComponenteId Descripcion                              AprobadoresNivel1                                                                   AprobadoresNivel2                                                                   AprobadoresNivel3
---------------- ---------------------------------------- ----------------------------------------------------------------------------------- ----------------------------------------------------------------------------------- -----------------------------------------------------------------------------------
9                Maquinaria                               19 - monica.rodriguez@definity.com, 150 - fulano.detal@definity.com                                             19 - monica.rodriguez@definity.com                                             19 - monica.rodriguez@definity.com

但是因为 MAX 子句偏离路线只在 AprobedoresNivel1(第三列)中显示一个元素(见下文)

TipoComponenteId Descripcion                              AprobadoresNivel1                                                                   AprobadoresNivel2                                                                   AprobadoresNivel3
---------------- ---------------------------------------- ----------------------------------------------------------------------------------- ----------------------------------------------------------------------------------- -----------------------------------------------------------------------------------
9                Maquinaria                               19 - monica.rodriguez@definityfirst.com                                             19 - monica.rodriguez@definityfirst.com                                             19 - monica.rodriguez@definityfirst.com

有没有办法在 PIVOT 子句中使用 group by?还有其他方法可以做到这一点吗?

【问题讨论】:

  • PIVOT 对行进行隐式分组,否则将无法使用 MAX 或任何其他聚合函数。发布您的查询
  • 顺便说一句,创建像19 - monica.rodriguez@definity.com, 150 - fulano.detal@definity.com 这样的值的唯一方法是使用STRING_AGG,它在 SQL Server 2017 中可用。也许您真正的问题是如何在早期版本中聚合字符串?跨度>
  • 我使用的是 sql server 2017,我的目标是将数据显示为问题中的第三个表。我的第一种方法是数据透视表,但如果有人知道可以指出我的更好方法,我会很乐意尝试。

标签: sql-server tsql pivot


【解决方案1】:

在 Panagiotis Kanavos 的帮助下,我设法做到了,这解决了我的问题:

SELECT 
     tc.ID TipoComponenteId  ,tc.Descripcion,
    STRING_AGG(
        CASE 
            WHEN ac.Nivel = 1 THEN (CONVERT(VARCHAR(20),ac.PosicionID) + ' - ' + e.Email)
            ELSE null
        END,',') AS AprobadoresNivel1,
    STRING_AGG(
        CASE 
            WHEN ac.Nivel = 2 THEN  (CONVERT(VARCHAR(20),ac.PosicionID) + ' - ' + e.Email)
            ELSE null
        END,',') AS AprobadoresNivel2,
    STRING_AGG(
        CASE 
            WHEN ac.Nivel = 3 THEN  (CONVERT(VARCHAR(20),ac.PosicionID) + ' - ' + e.Email)
            ELSE null
        END,',') AS AprobadoresNivel3
FROM AprobadoresComision ac
    INNER JOIN TipoComponente tc ON tc.ID = ac.ComponenteID
    INNER JOIN Posicion p ON p.PosicionID = ac.PosicionID
    INNER JOIN Empleado e ON e.EmpleadoID = p.EmpleadoID
WHERE ac.Estatus = 1 
    AND ac.ComponenteID = 9 
GROUP BY tc.ID,tc.Descripcion

谢谢

【讨论】:

    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 2012-03-08
    • 1970-01-01
    • 2012-12-07
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多