Mysql 显示多列中所有日期的计数-高级SQL

Mysql 显示多列中所有日期的计数-高级SQL,mysql,sql,sql-server,sql-server-2008,Mysql,Sql,Sql Server,Sql Server 2008,我有一张像这样的桌子 Dept | TicketCode | AsOfDate |FixedBy | FixedDate -------------------------------------------------------------------------------- merlin | ACE4E957-62C9-4447-A39E-AAA6928C7DD3 | 2014-03-04 | Mark | 2014-03-

我有一张像这样的桌子

Dept   |           TicketCode                 |  AsOfDate  |FixedBy | FixedDate
--------------------------------------------------------------------------------
merlin | ACE4E957-62C9-4447-A39E-AAA6928C7DD3 | 2014-03-04 | Mark   | 2014-03-05 
merlin | 95C5AF27-3211-E211-8E73-002481E28F48 | 2014-02-27 | Mark   | 2014-03-06
merlin | 581CE204-3586-E211-A244-002481E28F48 | 2014-02-27 | Ravi   | 2014-03-06
merlin | E9E6C0C6-7562-4265-82B0-5D14E3FEC674 | 2014-03-17 | Olive  | 2014-03-18
omega  | 1922DD26-3211-E211-8E73-002481E28F48 | 2014-03-18 | Sandy  | 2014-03-19
merlin | 94E6EF27-3211-E211-8E73-002481E28F48 | 2014-03-18 | Ravi   | 2014-03-19
omega  | E7F5EF27-3211-E211-8E73-002481E28F48 | 2014-03-18 | Sandy  | 2014-03-19
omega  | CF8D4227-3211-E211-8E73-002481E28F48 | 2014-03-19 | Olive  | 2014-03-20
omega  | 1A904227-3211-E211-8E73-002481E28F48 | 2014-03-19 | Ravi   | 2014-03-20
merlin | DCA94227-3211-E211-8E73-002481E28F48 | 2014-03-19 | Steve  | 2014-03-20
Pine   | 349E868F-DFFB-43DC-B50E-A9FFBF553908 | 2014-03-19 | Steve  | 2014-03-20
merlin | 281FDD26-3211-E211-8E73-002481E28F48 | 2014-03-20 | Olive  | 2014-03-21
omega  | FDB6AF27-3211-E211-8E73-002481E28F48 | 2014-03-20 | Steve  | 2014-03-21
omega  | B8A1A320-FD0E-45AD-8A5D-9E92529806CD | 2014-04-29 | Ravi   | 2014-04-30
omega  | B8A1A320-FD0E-45AD-8A5D-9E92529806CD | 2014-04-29 | Olive  | 2014-04-30
Pine   | 5369D01E-BA2E-4AA6-A228-A9073BC0AE1B | 2014-04-29 | Steve  | 2014-04-30
Pine   | 1B59E55F-4AFB-490C-901C-82E0743748C6 | 2014-04-30 | Sandy  | 2014-05-01
Pine   | B326348F-E838-42FD-BECB-A8071175BC27 | 2014-04-30 | Ravi   | 2014-05-01
Merlin | B326348F-E838-42FD-BECB-A8071175BC27 | 2014-04-30 | Sandy  | 2014-05-01
现在我的要求是,我应该显示的表应该是 基于给定日期范围的变量列,并且我应该计算“TicketCode” 带有dept、FixedBy、FixedDate的过滤器

简单地说,这就是我应该得到的

--给定日期范围

@start_date = '2014-03-05'
@end_date = '2014-03-08'

Dept   | FixedBy | 2014-03-05 | 2014-03-06 | 2014-03-07  | 2014-03-08 | 
-----------------------------------------------------------------------
merlin |   Mark  |     20     |     111    |     24      |     853    |
merlin |   Ravi  |     26     |     456    |     289     |     463    |
merlin |   Mark  |     85     |     81     |     24      |     801    |
merlin |   Steve |     75     |     0      |     0       |     1157   |
merlin |   Sandy |     0      |     78     |     24      |     789    |
merlin |   Mark  |     166    |     110    |     0       |     176    |
omega  |   Ravi  |     126    |     7456   |     289     |     63     |
omega  |   Mark  |     885    |     81     |     284     |     01     |
omega  |   Steve |     975    |     0      |     0       |     157    |
omega  |   Sandy |     90     |     78     |     24      |     79     |
omega  |   Mark  |     166    |     10     |     0       |     76     |
Pine   |   Sandy |     0      |     78     |     24      |     789    |
Pine   |   Mark  |     166    |     10     |     0       |     106    |
Pine   |   Ravi  |     126    |     746    |     289     |     63     |
注:计数以票号为基础,日期范围不固定。代码可以包含#临时表

Mark可能为所有部门工作,但我们只需要给定日期和贡献进度的部门静态数据

我已经尝试了我能找到的所有可用资源。 我就是无法通过

仅供参考:日期范围是手动给定的,因此列的计数不同。 代码可以包含#临时表,但不包含创建函数(我不是管理员)


非常感谢。

这里是一些MS-SQL代码,可以提供您想要的结果。它创建一个dynamics sSQL脚本并执行该脚本以获得结果。如果这不能100%解决你的问题,我希望它至少能为你指明正确的方向

CREATE TABLE  #Data (Dept VARCHAR(20),TicketCode VARCHAR(100), AsOfDate DATETIME, FixedBy VARCHAR(10), FixedDate DATETIME)

DECLARE @StartDate      AS  DATETIME
DECLARE @EndDate        AS  DATETIME
DECLARE @ProcessDate    AS  DATETIME
DECLARE @sSQL           AS  VARCHAR(MAX)
DECLARE @dtString       AS  VARCHAR(100)

SET @StartDate  = '2014-03-19'
SET @EndDate    = '2014-03-21'

INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('merlin ',' ACE4E957-62C9-4447-A39E-AAA6928C7DD3 ',' 2014-03-04 ',' Mark   ',' 2014-03-05 ')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('merlin ',' 95C5AF27-3211-E211-8E73-002481E28F48 ',' 2014-02-27 ',' Mark   ',' 2014-03-06')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('merlin ',' 581CE204-3586-E211-A244-002481E28F48 ',' 2014-02-27 ',' Ravi   ',' 2014-03-06')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('merlin ',' E9E6C0C6-7562-4265-82B0-5D14E3FEC674 ',' 2014-03-17 ',' Olive  ',' 2014-03-18')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('omega  ',' 1922DD26-3211-E211-8E73-002481E28F48 ',' 2014-03-18 ',' Sandy  ',' 2014-03-19')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('merlin ',' 94E6EF27-3211-E211-8E73-002481E28F48 ',' 2014-03-18 ',' Ravi   ',' 2014-03-19')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('omega  ',' E7F5EF27-3211-E211-8E73-002481E28F48 ',' 2014-03-18 ',' Sandy  ',' 2014-03-19')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('omega  ',' CF8D4227-3211-E211-8E73-002481E28F48 ',' 2014-03-19 ',' Olive  ',' 2014-03-20')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('omega  ',' 1A904227-3211-E211-8E73-002481E28F48 ',' 2014-03-19 ',' Sandy   ',' 2014-03-19')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('merlin ',' DCA94227-3211-E211-8E73-002481E28F48 ',' 2014-03-19 ',' Steve  ',' 2014-03-20')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('Pine   ',' 349E868F-DFFB-43DC-B50E-A9FFBF553908 ',' 2014-03-19 ',' Steve  ',' 2014-03-20')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('merlin ',' 281FDD26-3211-E211-8E73-002481E28F48 ',' 2014-03-20 ',' Olive  ',' 2014-03-21')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('omega  ',' FDB6AF27-3211-E211-8E73-002481E28F48 ',' 2014-03-20 ',' Steve  ',' 2014-03-21')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('omega  ',' B8A1A320-FD0E-45AD-8A5D-9E92529806CD ',' 2014-04-29 ',' Ravi   ',' 2014-04-30')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('omega  ',' B8A1A320-FD0E-45AD-8A5D-9E92529806CD ',' 2014-04-29 ',' Olive  ',' 2014-04-30')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('Pine   ',' 5369D01E-BA2E-4AA6-A228-A9073BC0AE1B ',' 2014-04-29 ',' Steve  ',' 2014-04-30')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('Pine   ',' 1B59E55F-4AFB-490C-901C-82E0743748C6 ',' 2014-04-30 ',' Sandy  ',' 2014-05-01')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('Pine   ',' B326348F-E838-42FD-BECB-A8071175BC27 ',' 2014-04-30 ',' Ravi   ',' 2014-05-01')
INSERT INTO #Data (Dept, TicketCode, AsOfDate, FixedBy, FixedDate) VALUES('Merlin ',' B326348F-E838-42FD-BECB-A8071175BC27 ',' 2014-04-30 ',' Sandy  ',' 2014-05-01')

SET @ProcessDate = @StartDate 

SET @sSQL = 'SELECT Dept,FixedBy '

/*Create the Dynamics SQL for the Columns*/
WHILE @ProcessDate < @EndDate
    BEGIN
        SET @dtString = CAST(YEAR(@ProcessDate) AS CHAR(4)) + '_'  +  CAST(MONTH(@ProcessDate) AS VARCHAR(2)) + '_' + CAST(DAY(@ProcessDate) AS VARCHAR(2))
        SET @sSQL = @sSQL + ',
            SUM(CASE WHEN FixedDate = ''' + CAST(@ProcessDate AS CHAR(20)) +  ''' THEN  1 ELSE 0 END) AS dt_' + @dtString
        SET @ProcessDate = @ProcessDate + 1
    END 
SET
    @sSQL = @sSQL +  ' FROM #Data GROUP BY Dept,FixedBy ORDER BY Dept,FixedBy '

SELECT  @sSQL /*To see what will execute*/ 

EXECUTE (@sSQL)  /*Run the Query to return results*/ 

DROP TABLE #Data  /*Remove table*/
CREATE TABLE#Data(Dept VARCHAR(20)、TicketCode VARCHAR(100)、AsOfDate DATETIME、FixedBy VARCHAR(10)、FixedDate DATETIME)
将@StartDate声明为DATETIME
将@EndDate声明为DATETIME
将@ProcessDate声明为DATETIME
将@sSQL声明为VARCHAR(MAX)
将@dtString声明为VARCHAR(100)
设置为起始日期='2014-03-19'
设置@EndDate='2014-03-21'
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('merlin','ACE4E957-62C9-4447-A39E-AAA6928C7DD3','2014-03-04','Mark','2014-03-05')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('merlin','95C5AF27-3211-E211-8E73-002481E28F48','2014-02-27','Mark','2014-03-06')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值(“梅林”、“581CE204-3586-E211-A244-002481E28F48”、“2014-02-27”、“拉维”、“2014-03-06”)
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('merlin','E9E6C0C6-7562-4265-82B0-5D14E3FEC674','2014-03-17','Olive','2014-03-18')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('omega','1922DD26-3211-E211-8E73-002481E28F48','2014-03-18','Sandy','2014-03-19')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('merlin','94E6EF27-3211-E211-8E73-002481E28F48','2014-03-18','Ravi','2014-03-19')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('omega','E7F5EF27-3211-E211-8E73-002481E28F48','2014-03-18','Sandy','2014-03-19')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('omega','CF8D4227-3211-E211-8E73-002481E28F48','2014-03-19','Olive','2014-03-20')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('omega','1A904227-3211-E211-8E73-002481E28F48','2014-03-19','Sandy','2014-03-19')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('merlin','DCA94227-3211-E211-8E73-002481E28F48','2014-03-19','Steve','2014-03-20')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值(“Pine”、“349E868F-DFFB-43DC-B50E-A9FFBF553908”、“2014-03-19”、“Steve”、“2014-03-20”)
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('merlin','281FDD26-3211-E211-8E73-002481E28F48','2014-03-20','Olive','2014-03-21')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('omega','FDB6AF27-3211-E211-8E73-002481E28F48','2014-03-20','Steve','2014-03-21')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值(“欧米茄”、“B8A1A320-FD0E-45AD-8A5D-9E92529806CD”、“2014-04-29”、“拉维”、“2014-04-30”)
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值('omega','B8A1A320-FD0E-45AD-8A5D-9E92529806CD','2014-04-29','Olive','2014-04-30')
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值(“Pine”、“5369D01E-BA2E-4AA6-A228-A9073BC0AE1B”、“2014-04-29”、“Steve”、“2014-04-30”)
在数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值(“Pine”、“1B59E55F-4AFB-490C-901C-82E0743748C6”、“2014-04-30”、“Sandy”、“2014-05-01”)
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值(“Pine”、“B326348F-E838-42FD-BECB-A8071175BC27”、“2014-04-30”、“Ravi”、“2014-05-01”)
在#数据(部门、票证代码、AsOfDate、FixedBy、FixedDate)中插入值(“梅林”、“B326348F-E838-42FD-BECB-A8071175BC27”、“2014-04-30”、“桑迪”、“2014-05-01”)
设置@ProcessDate=@StartDate
SET@sSQL='SELECT Dept,FixedBy'
/*为列创建动态SQL*/
而@ProcessDate<@EndDate
开始
将@dtString=CAST(年(@ProcessDate)设置为CHAR(4))+''.'+CAST(月(@ProcessDate)设置为VARCHAR(2))+'.'+CAST(日(@ProcessDate)设置为VARCHAR(2))
设置@sSQL=@sSQL+',
SUM(当FixedDate='''+CAST(@ProcessDate作为CHAR(20))+''s然后1或0结束时的情况)作为dt_'+@dtString
设置@ProcessDate=@ProcessDate+1
终止
设置
@sSQL=@sSQL+'来自#数据组,按部门,按订单,按部门,按固定'
选择@sSQL/*查看将执行的操作*/
执行(@sSQL)/*运行查询以返回结果*/
删除表格#数据/*删除表格*/

使用dynamic pivot解决此问题相对容易。但是,您的结果与您的数据不匹配——在“2014-03-05”和“2014-03-08”之间的样本数据中只有两行

代码如下:

declare @start_date as date,
@end_date as date;

select @start_date = '2014-03-05', @end_date = '2014-03-08';

declare @collist nvarchar(max)
set @collist = stuff((select distinct ',' + quotename(convert(varchar(8), FixedDate, 112)) 
    from #t -- your table here
    where FixedDate between @start_date and @end_date
    for xml path(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

declare @q nvarchar(max)
set @q = '
select Dept, FixedBy, ' + @collist + ' 
from (
    select Dept, FixedBy, FixedDate, TicketCode
        from (
        select *
        from #t -- your table here
    where FixedDate between ''' + convert(varchar(8),@start_date,112) + ''' and ''' + convert(varchar(8),@end_date,112) + '''
    ) as x
) as source
pivot (
    count(TicketCode)
    for FixedDate in (' + @collist + ')
) as pvt
'
exec (@q)
结果(使用@Richard,thx的插入脚本):


感谢您介绍pivot概念。但是,我得到的结果只有一行。(一直)你能修改它吗?不管怎样,@Ritchardvivian查询就像上面说的那样100%工作,但是,我希望看到h
Dept                 FixedBy    20140305    20140306
-------------------- ---------- ----------- -----------
merlin                Mark      1           1
merlin                Ravi      0           1