如何将月份行中的完整日期显示为列名?

时间:2019-02-19 09:13:29

标签: sql sql-server

我需要在子查询方法中将行值显示为列名。

location | date
india    | 1-1-2019
india    | 2-1-2019
india    | 3-1-2019
india    | 4-1-2019
india    | 5-1-2019
japan    | 6-1-2019
japan    | 7-1-2019
japan    | 8-1-2019
japan    | 9-1-2019
japan    | 10-1-2019
japan    | 11-1-2019
korea    | 12-1-2019
korea    | 13-1-2019
korea    | 14-1-2019
korea    | 15-1-2019
korea    | 16-1-2019
korea    | 17-1-2019

这是表结构,但我需要这样的输出

location | 1-1-2019 | 2-1-2019 | 3-1-2019 | 4-1-2019 | 5-1-2019 | 6-1-2019 | 7-1-2019 | 8-1-2019 | 9-1-2019 | 10-1-2019 | 11-1-2019 | 12-1-2019 | 13-1-2019 | 14-1-2019 | 15-1-2019 | 16-1-2019 | 16-1-2019 |

我需要上面的输出。只需使用子查询或其他任何方式将日期的行值显示为列名

Labels    1/1/2019  1/2/2019    1/3/2019    1/4/2019    1/5/2019    1/6/2019    1/7/2019    1/8/2019    1/9/2019    1/10/2019   1/11/2019   1/12/2019   1/13/2019   1/14/2019   1/15/2019   1/16/2019   1/17/2019   1/18/2019   1/19/2019   1/20/2019   1/21/2019   1/22/2019   1/23/2019   1/24/2019   1/25/2019   1/26/2019
china   5   2   2   5   4       7   1   3   3       6               6   3   3   3       3   6   1   1   2   4
india   37  8   8   7   7   23  4       8   4   15  10      4       5   1   5   6   20  4       4   6   12  
japan   6   10  5   10  13      13  11  12  6   7   9       9   10  7   5   10  46      10      14  7   8   
london  17  32  35  36  52  78  35  21  26  27  30  23          81  49  27  38  49      30  21  38  34  34

我正在使用动态方法在列名称中显示日期值。但这不起作用。

此查询正在此方法中使用

      select 
    LOCATION
    ,SUM(case when VISIT_DATE='1-1-2019' then 1 else 0 end) as '1-1-2019'
    ,SUM(case when VISIT_DATE='1-2-2019' then 1 else 0 end) as '2-2-2019'
.
.
.
 ,SUM(case when VISIT_DATE='1-31-2019' then 1 else 0 end) as '2-31-2019'
    from 
    testing_table
    where 
    APPOINTMENT_TYPE='REG'
    group by LOCATION
    order by LOCATION

1 个答案:

答案 0 :(得分:0)

您可以使用数据透视和动态查询来获得此结果。下面的查询只是展示Pivot和动态查询如何协同工作的一个示例,您可以根据表结构更改查询。

DECLARE @Pivot_Column [nvarchar](max);  
DECLARE @Query [nvarchar](max);  

/*Select Pivot Column*/  
SELECT @Pivot_Column= COALESCE(@Pivot_Column+',','')+ QUOTENAME(Year) FROM  
(SELECT DISTINCT [Year] FROM Employee)Tab  

/*Create Dynamic Query*/  
SELECT @Query='SELECT Name, '+@Pivot_Column+'FROM   
(SELECT Name, [Year] , Sales FROM Employee )Tab1  
PIVOT  
(  
SUM(Sales) FOR [Year] IN ('+@Pivot_Column+')) AS Tab2  
ORDER BY Tab2.Name'  

/*Execute Query*/  
EXEC  sp_executesql  @Query