Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL数据透视中要从yyyy-mm-dd转换为mm-yy的日期_Sql_Sql Server_Datetime_Pivot - Fatal编程技术网

SQL数据透视中要从yyyy-mm-dd转换为mm-yy的日期

SQL数据透视中要从yyyy-mm-dd转换为mm-yy的日期,sql,sql-server,datetime,pivot,Sql,Sql Server,Datetime,Pivot,我在SQL Server 2016中使用了一个pivot查询,它的效果有些好: select * FROM (select Analyst,Task_Type,Load,Completed,Date_Of_Assignment from mytable where Task_Type IN ('Loans') ) as TEST PIVOT ( SUM(Completed) FOR [Date_Of_Assignment] IN ([2018-05-22],[2018-06-2

我在SQL Server 2016中使用了一个pivot查询,它的效果有些好:

select *

FROM (select Analyst,Task_Type,Load,Completed,Date_Of_Assignment

 from mytable where Task_Type IN ('Loans') ) as TEST PIVOT 

(

SUM(Completed)

FOR 

[Date_Of_Assignment] IN ([2018-05-22],[2018-06-22],[2018-07-22])

) as P
它返回为:

Agent_Name  Task_Type   Total_Received  2018-05-22  2018-06-22 2018-07-22
Steve       Loans        20                 15         15           15
Cathe       Loans        20                 15         15           15
Adam        Loans        20                 15         15           15
Klaus       Loans        20                 15         15           15
这很酷,但我更需要这样的

Agent_Name  Task_Type   Total_Received    May 18     June 18      July 18
Steve       Loans        20                 15         15           15
Cathe       Loans        20                 15         15           15
Adam        Loans        20                 15         15           15
Klaus       Loans        20                 15         15           15
考虑到每个负载可能不止一天的数据,实际上应该是每个工作日

我尝试按日期分组,但它返回错误

如果我喜欢:

select *

FROM (select Analyst,Task_Type,Load,Completed,Date_Of_Assigment

CASE WHEN FORMAT(Date_Of_Assigment,'MM-yy') = '05-18' THEN 'May 18'
     WHEN FORMAT(Date_Of_Assigment,'MM-yy') = '06-18' THEN 'Jun 18'
     WHEN FORMAT(Date_Of_Assigment,'MM-yy') = '07-18' THEN 'Jul 18'
END AS MonthT

 from mytable where Task_Type IN ('Loans') as TEST PIVOT 


(

SUM(Completed)

FOR 

[MonthT] IN (['May 18'],['Jun 18'],['Jul 18'])

) as P
我收到:

Analyst    Task     Total_Received   'May 18'   'Jun 18'    'Jul 18'
Steve     Billing     20                NULL       NULL       NULL
Cathe     Billing     20                NULL       NULL       NULL
Adam      Billing     20                NULL       NULL       NULL
Klaus     Billing     20                NULL       NULL       NULL
它会将日期转换为列,但只包含空值

数据类型有:日期分配的日期、任务类型的nvarchar和其他列的分析和整数

我做错了什么

非常感谢

我会这样做:

select Analyst, Task, 
       sum(case when MonthT = '05-18' then Completed else 0 end) [May 18],
       sum(case when MonthT = '06 18' then Completed else 0 end) [Jun 18],
       sum(case when MonthT = '05-18' then Completed else 0 end) [Jul 18]
from table t cross apply
     ( values format (Date_Of_Assigment, 'MM-yy')
     ) tt (MonthT)
where Task_Type = 'Loans'
group by Analyst, Task; 
试试这个:

SELECT 
    *
FROM ( 

    SELECT 
        Analyst
        , Task_Type
        , [Load]
        , Completed
        , DATENAME( MM, Date_Of_Assignment )  + ' ' + CAST( ( YEAR( Date_Of_Assignment ) % 100 ) AS VARCHAR(2) ) AS Date_Of_Assignment
    FROM mytable WHERE Task_Type IN ( 'Loans' ) 

) AS TEST
PIVOT (

    SUM(Completed)
    FOR 
    [Date_Of_Assignment] IN ( [May 18], [June 18], [July 18] )

) AS P
我无法访问您的数据来测试这一点,但从理论上讲,它应该满足您的要求

以下是您可以在SSMS中运行的简单概念证明:

DECLARE @mytable TABLE (
    Analyst VARCHAR(10), Task_Type VARCHAR(10) DEFAULT 'Loans', [Load] INT, Completed INT, Date_Of_Assignment DATETIME
)

INSERT INTO @mytable ( Analyst, [Load], Completed, Date_Of_Assignment )
VALUES
( 'Steve', 3, 2, '05/22/2018' )
, ( 'Steve', 1, 1, '06/22/2018' )
, ( 'Steve', 4, 3, '07/22/2018' );

SELECT 
    Analyst, Task_Type, SUM( [Load] ) AS Total_Recieved, SUM( [May 18] ) AS [May 18], SUM( [June 18] ) AS [June 18], SUM( [July 18] ) AS [July 18]
FROM ( 

    SELECT 
        Analyst
        , Task_Type
        , [Load]
        , Completed
        , DATENAME( MM, Date_Of_Assignment )  + ' ' + CAST( ( YEAR( Date_Of_Assignment ) % 100 ) AS VARCHAR(2) ) AS Date_Of_Assignment
    FROM @mytable 
    WHERE Task_Type IN ( 'Loans' )

) AS TEST
PIVOT (

    SUM( Completed ) FOR [Date_Of_Assignment] IN ( [May 18], [June 18], [July 18] )

) AS P
GROUP BY Analyst, Task_Type;
返回

+---------+-----------+----------------+--------+---------+---------+
| Analyst | Task_Type | Total_Recieved | May 18 | June 18 | July 18 |
+---------+-----------+----------------+--------+---------+---------+
| Steve   | Loans     |              8 |      2 |       1 |       3 |
+---------+-----------+----------------+--------+---------+---------+

大家好!感谢您的帮助,我删除了(['5月18日]、['6月18日]、['7月18日])中的[Monht]中的引号,现在它的效果非常好。再次感谢!