我附上了sql查询和结果表的截图,这里我将查看表格Horizontal。
喜欢
| iFruit | iPlant | Pat on the back | The Incredebles |
| 2 | 1 | 1 | 1 |
请帮助我编写枢轴功能以获得上述格式。
答案 0 :(得分:1)
您可以按以下顺序编写查询。
Select iFruit, iPlant, [Pat on the Back], [The Incredibles]
from (select r.award_name as Awardname,
count(r.award_name) as Awardcount
from associate_L_award p, asociate_information q, award_list r
where p.Id = q.id
and p.award_no = r.award_no
and q.id='290007'
group by r.award_name) as S
Pivot
(
sum (AwardCount)
for AwardName in (iFruit, iPlant, [Pat on the Back], [The Incredibles])
) as pvt
示例:
temp table
注意:如果您的基本查询返回更多奖励名称,则必须在此查询中手动添加它们。另外,如果您的奖励名称中有空格,例如“背面拍”,请将该字符串括在“[]”中。
编辑:经过大量的RnD后,我得到了解决方案。
场景:主要返回的行数(它们依次成为枢轴中的列)不是固定的,它们是动态的。
解决方案:
SELECT *
INTO #temp
FROM (SELECT r.award_name AS Awardname,
Count(r.award_name) AS Awardcount
FROM associate_l_award p,
asociate_information q,
award_list r
WHERE p.id = q.id
AND p.award_no = r.award_no
AND q.id = '290007'
GROUP BY r.award_name) AS S
以存储主查询的输出。然而
这不是强制性的,您可以随时使用主查询
需要。但是从性能和可读性的角度来看,您可以使用
临时表。 DECLARE @str NVARCHAR(1000) DECLARE @sql NVARCHAR(1000) SELECT @str = COALESCE(@str+',', '') + awardname FROM #temp SET @sql = N'select ' + @str + ' from (SELECT Awardname, Awardcount FROM #temp) as S Pivot ( sum(Awardcount) for Awardname in (' + @str + ') )as pvt;'
EXECUTE Sp_executesql @sql
{{1}}