问题 数据透视表返回多行为NULL,结果应该在一行上分组


我有下面的表格,我正在寻找,以便第1列中的描述成为新枢轴中的列标题。

 Nominal Group  | GrpID | Description     | Value       | CustomerID
 ---------------+-------+-----------------+-------------+-----------
 Balance Sheet  | 7     | BS description  | 56973.10    |     2
 Cost of Sales  | 4     | COS description | 55950.17    |     2
 Sales          | 1     | Sales           | -178796.18  |     2
 Labour Costs   | 5     | Wages           | 18596.43    |     2
 Overheads      | 6     | Rent            | 47276.48    |     2

我正在使用下面的代码获得下面的结果集:

select * from trialbalancegrouping 
PIVOT (Sum(value)
for nominalgroupname in ([Sales],[Cost of Sales],[Labour Costs],[Overheads])) AS PVTtable

-

 GrpID |  Description  | CustomerID |    Sales   | Cost of Sales | Labour Costs | Overheads
 ------+---------------+------------+------------+---------------+--------------+-----------
    1  |    Sales      |      2     | -178796.18 |     NULL      |      NULL    |     NULL
    2  |COS Description|      2     |    NULL    |   55950.17    |      NULL    |     NULL
    3  |    Labour     |      2     |    NULL    |     NULL      |   18596.43   |     NULL
    4  |   Overheads   |      2     |    NULL    |     NULL      |      NULL    |   47276.48

理想情况下,我希望每个客户的输出为一行,如下所示:

CustomerID |    Sales   |  Cost of Sales | Labour Costs | Overheads
-----------+------------+----------------+--------------+------------
     2     | -178796.18 |     55950.17   |   18596.43   |   47276.48

4913
2017-11-12 10:24


起源

请你能告诉我桌子结构 - Hardik Parmar


答案:


任何可用的列都将传递给 PIVOT 函数,所以除了聚合的列之外,并且已旋转的列被隐式分组,因此 GrpID 和 Description 存在,并且不包括它按分组,因此每个组合获得一行。您需要使用子查询限制传递给pivot函数的列:

SELECT  pvt.CustomerID,
        pvt.Sales,
        pvt.[Cost of Sales],
        pvt.[Labour Costs],
        pvt.[Overheads]
FROM    (   SELECT  CustomerID, nominalgroupname, Value
            FROM    trialbalancegrouping
        ) AS t
        PIVOT
        (   SUM(Value)
            FOR nominalgroupname IN 
                (   [Sales],[Cost of Sales],
                    [Labour Costs],[Overheads]
                )
        ) AS pvt;

12
2017-11-12 11:02



看起来很好Gareth,我刚刚删除了子查询中的描述,现在可以根据需要引入尽可能多的客户详细信息。谢谢您的帮助 :) - Stu412
对不起,应该是的 nominalgroupname  在子查询中,不是 description。 - GarethD
没问题,它比我在几个小时内得到的还要快5分钟!谢谢 - Stu412