0

我有以下查询生成我的数据透视结果:

SELECT * FROM 
(
    SELECT 
    #tmp1.Name,  
    DATEDIFF(D,#tmp1.AuthDate,#tmp1.AuthExpirationDate) AS AuthLenInDays,
    #tmp1.NbrOfAuthorizations, 
    #tmp1.MODE
    FROM #tmp1
    LEFT JOIN #tmp2 
    ON #tmp2.AuthID = #tmp1.AuthID 
    GROUP BY #tmp1.Name, #tmp1.NbrOfAuthorizations, #tmp1.AuthDate, #tmp1.AuthExpirationDate,  #tmp1.MODE

) AS InnerTbl

PIVOT
(AVG(AuthLenInDays)  FOR [MODE] IN ([Preservation]) 

) PivotResults1   

结果如下:

Name        NbrOfAuthorizations     Preservation
Centro          1                   79
Dennis          1                   92
Therapy Center  1                   68
Florez          1                   92

我有两个我无法弄清楚的问题,我已经尝试了我能想到的一切,甚至还有来自stackoverflow的其他建议。

  1. 我不知道如何更改结果中最右侧列的名称(保留)。这是一个平均数字,所以我想将该列标记为“平均”。
  2. 此外,需要对表中的所有值求和 NbrOfAuthorizations。我尝试过使用枢轴,这让我很接近但不是一直到那里,我也尝试在 InnerTbl 查询中使用 SUM 但也不是这样。

如果我把我的原始数据导出到 excel 并在那里做一个透视,我可以看到数字和我应该得​​到什么。我正在尝试采用该过程并纯粹在 SQL 中完成。根据表中的数据,SUM 的值应为

   Name     NbrOfAuthorizations     Preservation
    Centro          5                   79
    Dennis          1                   92
    Therapy Center  57                  68
    Florez          1                   92

有没有高手大神?

4

1 回答 1

1

看起来你根本不需要枢轴:

select
    t1.Name,  
    sum(t1.NbrOfAuthorizations) as NbrOfAuthorizations,
    avg(datediff(dd, t1.AuthDate, t1.AuthExpirationDate)) as AuthLenInDays
from #tmp1 as t1
    -- looks like you don't need join also, or there're multiple rows
    -- in #tmp2 for row in #tmp1
    -- left outer join #tmp2 as t2 on t2.AuthID = t1.AuthID 
where t1.mode = 'Preservation'
group by t1.Name
于 2013-09-18T19:34:35.263 回答