总结SQL中的表结果

时间:2013-10-18 21:07:16

标签: sql sql-server sql-server-2008

将下表作为SQL结果:

Current Result

我想使用上面生成的表格并生成一个表格,该表格将给定的信息添加到:

Required Result

我有多个areaName和多个functionNames以及多个用户。如果可能,请告诉我以及如何做?

我已经尝试了几件事,但我现在刚刚筋疲力尽,需要一个方向。任何帮助表示赞赏。

即使您可以提供伪代码,我也可以尝试使用它。从作为给定表的SQL结果开始。

2 个答案:

答案 0 :(得分:0)

使用correlated sub-queries来获得所需的结果。我在下面提供了一个例子。测试第一个摘要列,然后添加其他摘要列(如果有)。希望这是有道理的,也有帮助。或者,您可以使用CTE (common table expression)来获得类似的结果。

SELECT a.areaName, a.functionName
       , (SELECT count(DISTINCT b.UserKey) 
             from AREAS b 
             where a.areaName = b.areaName 
             and a.functionName = b.functionName 
             and b.[1-add] = 1) as UsersinAdd
-- Lather/rinse/repeat for other summary columns

FROM AREAS a
group by a.areaName, a.functionName

答案 1 :(得分:0)

您的问题源于表格的非规范化结构。列[1-add],...,[8-correction]应该是列中的值,而不是列。正如您所发现的那样,这会导致更复杂的查询。

unpivot命令可以纠正这个错误。

select areaname, functionname, rights, count(distinct userkey)
    from 
    (
    select * from yourtable
        unpivot (permission for rights in ([1-add], [2-update/display],[4-update/display all] , [8-correction] )) u
    ) v
    group by areaname, functionname, rights