如何创建表以从查询行结果生成列?

问题描述 投票:-1回答:1

我正在尝试像这样从现有表生成新表。我希望当前表中的“ ProjectName”列返回不同的值作为结果表中的新列。然后,我希望各行返回不同的UserID列,为每个用户计算每个项目的总TimeIn和TimeOut。

然后我想将结果放入aspx gridview或只是html表。

请参见下图:

enter image description here

html asp.net sql-server gridview datatable
1个回答
0
投票

假设您要处理的是固定的项目列表,则可以使用条件聚合:

SELECT
    userID,
    manager,
    SUM(CASE WHEN ProjectName = 'ProjectA' THEN DATEDIFF(minute, TimeIn, TimeOut) ELSE 0 END) ProjectA,
    SUM(CASE WHEN ProjectName = 'ProjectB' THEN DATEDIFF(minute, TimeIn, TimeOut) ELSE 0 END) ProjectB,
    SUM(CASE WHEN ProjectName = 'ProjectC' THEN DATEDIFF(minute, TimeIn, TimeOut) ELSE 0 END) ProjectC
FROM mytable
GROUP BY 
    userID,
    manager

这将为您提供每个用户/经理元组在每个项目上花费的总时间,以分钟为单位,并允许给定用户/经理元组在同一项目上有多个条目。


0
投票

正如您迄今未提及的任何事情尝试此查询可能会对您有所帮助

Declare @SQL varchar(max) = '
Select *
 From  (
        Select ID  
              ,UserID
              ,Manager

          From Your_Table
       ) A
 Pivot (max([ProjectName]) For [TimeIn] in (' + Stuff((Select Distinct ','+QuoteName (TimeIn) 
                    From Your_Table A  
                    Order By 1 
                    For XML Path('')),1,1,'')  + ') ) p'
--Print @SQL
Exec(@SQL)
© www.soinside.com 2019 - 2024. All rights reserved.