我需要在子查询方法中将行值显示为列名。
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
答案 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