从我的表SQL Server更改我的数据结果
当我执行查询时,给我这样的结果,您可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表从我的表SQL Server更改我的数据结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,当我执行查询时,给我这样的结果,您可以使用PIVOT和UNPIVOT关系运算符将表值表达式更改为另一个表 Quarters Status1 Status2 Status3 Status4 Quarter1 NULL 1 NULL 1 Quarter3 NULL NULL NULL 1 Quarter4 NULL NULL NULL 2 Quater1 0 0 0 0 Q
Quarters Status1 Status2 Status3 Status4
Quarter1 NULL 1 NULL 1
Quarter3 NULL NULL NULL 1
Quarter4 NULL NULL NULL 2
Quater1 0 0 0 0
Quater2 0 0 0 0
Quater3 0 0 0 0
Quater4 0 0 0 0
来源:这里有一个更具体的轴心
SELECT <<Columns>>
FROM <<Tables>>
PIVOT
(
AggregateFunction(<<ColumnToBeAggregated>>)
FOR PivotColumn IN (<<PivotColumnValues>>)
) AS <<Alias>>
REVERSE是完全不同的,它反转字符串的字符:REVERSE'Mystring'='gnirtsyM'。在这里,你要做的是旋转,先取消旋转,然后旋转。有100个bothnon SO的例子;您尝试了什么,为什么不起作用?我可以将空值更改为0吗?我正在使用此函数iSnULLcount*,0但不起作用@马可德巴拉,而不是选择*。。。可以指定列。请稍等片刻,编辑回答谢谢,先生,但我的意思是在表中显示所有四个季度,当状态为空时,显示状态值为0的量程。@marcodebala不清楚。也许如果你编辑你的问题,并提供一个小的数据样本和期望的结果。@marcodebala更新了答案。注意,我添加了一个UNION ALL。这将创建和零数据交叉点,还消除了对ISNULL的需要
Select *
From (
Select Quarters = concat('Quarter',DATEPART(QUARTER,EndDate))
,Item = [Name]
,Value = count(*)
From TS
Group By DATEPART(QUARTER,EndDate),[Name]
Union All
Select Quarters
,Item
,Value = 0
From ( values ('Quarter1')
,('Quarter2')
,('Quarter3')
,('Quarter4')
) A(Quarters)
Cross Join ( Select distinct Item=[Name] from TS) B
) src
Pivot ( sum(Value) for Item in ([Status1],[Status2],[Status3],[Status4],[Status5],[Status6]) ) pvt