2013-02-21 101 views
-3

如下所示,如果campaignIds相等,我想让它们成组。但我不知道该怎么做。按CampaignId分组无效。在tsql中对行进行分组

enter image description here

活生生的例子:http://www.sqlfiddle.com/#!3/cb1dd/2

+1

如果你归了你的设计,这将很容易的声明... – 2013-02-21 08:55:48

+0

的正常化哪一个 ? – 2013-02-21 08:57:54

+0

你想达到哪个结果? – 2013-02-21 08:58:18

回答

1

查找到SQL Server中使用支点功能,它可能会导致更可读的SQL http://msdn.microsoft.com/en-gb/library/ms177410(v=sql.105).aspx

SELECT CampaignId, [1] AS Rate1, [2] AS Rate2, [3] AS Rate3 
FROM 
(SELECT CampaignId, RateNumber, RateValue 
FROM CampaignRate) p 
PIVOT 
(
SUM (RateValue) 
FOR RateNumber IN 
([1], [2], [3]) 
) AS pvt 
ORDER BY pvt.CampaignId; 
    GO 
2

它应该得到每率数字评分的总和?您可以在CampaignID和SUM()函数上使用Group By

select CampaignId, 
    sum(case when RateNumber = 1 then RateValue else null end) as Rate1, 
    sum(case when RateNumber = 2 then RateValue else null end) as Rate2, 
    sum(case when RateNumber = 3 then RateValue else null end) as Rate3, 
    sum(case when RateNumber = 4 then RateValue else null end) as Rate4, 
    sum(case when RateNumber = 5 then RateValue else null end) as Rate5, 
    sum(case when RateNumber = 6 then RateValue else null end) as Rate6, 
    sum(case when RateNumber = 7 then RateValue else null end) as Rate7, 
    sum(case when RateNumber = 8 then RateValue else null end) as Rate8, 
    sum(case when RateNumber = 9 then RateValue else null end) as Rate9, 
    sum(case when RateNumber = 10 then RateValue else null end) as Rate10, 
    sum(case when RateNumber = 11 then RateValue else null end) as Rate11, 
    sum(case when RateNumber = 12 then RateValue else null end) as Rate12, 
    sum(case when RateNumber = 13 then RateValue else null end) as Rate13, 
    sum(case when RateNumber = 14 then RateValue else null end) as Rate14, 
    sum(case when RateNumber = 15 then RateValue else null end) as Rate15, 
    sum(case when RateNumber = 16 then RateValue else null end) as Rate16, 
    sum(case when RateNumber = 17 then RateValue else null end) as Rate17, 
    sum(case when RateNumber = 18 then RateValue else null end) as Rate18, 
    sum(case when RateNumber = 19 then RateValue else null end) as Rate19, 
    sum(case when RateNumber = 20 then RateValue else null end) as Rate20, 
    sum(case when RateNumber = 21 then RateValue else null end) as Rate21, 
    sum(case when RateNumber = 22 then RateValue else null end) as Rate22, 
    sum(case when RateNumber = 23 then RateValue else null end) as Rate23, 
    sum(case when RateNumber = 24 then RateValue else null end) as Rate24 
    from CampaignRate 
group by CampaignId; 

查看fiddle