2017-04-17 102 views
0

如果此问题的标题不正确,但我不知道如何对其进行说明,请事先致歉。我想要做的是:SQL Server中的三维数组

我想显示这种格式的表格。

    week_1  week_2   week_3 
sub_account_1  25 calls 35 calls  15 calls 
sub_account_2  35 calls 17 calls  13 calls  
sub_account_3  26 calls 5 calls  11 calls 

我想是这样的:

SELECT count(calls), date, sub_account_name 
WHERE master_account = 12 
AND date IN ('2017-01-07','2017-01-14','2017-01-21') 
GROUP BY sub_account_name, date 

这个查询没有显示我想要的东西,而不是被显示:

sub_account_1 week_1 35 calls 
sub_account_1 week_2 25 calls 
sub_account_1 week_3 17 calls 
sub_account_2 week_1 13 calls 
sub_account_2 week_2 11 calls 
...... 
...... 
sub_account_3 week_3 15 calls 

我将不胜感激,如果有人可以帮助我如何编写查询以生成所需的表格。

编辑以显示取样数据:

有两个表(计费和呼叫)

Account 
ID   int 
AccountId int 
Name   varchar(50) 
master  int 

主账户和子账户都是相同的数据类型和存储在同一个表。如果一个账户有accountId = master,这意味着它是一个主账户。其所有子账户将其主账户的accountId值保存为主价值。

Call 
ID   int 
callId  int 
date   datetime 
f_accountId int 

我需要在以下日期(“2017年1月7日”,“2017年1月14日”,“2017年1月21日”)的格式显示,以上所有的呼叫。

+0

听起来像你需要一个数据透视表,但你需要显示当前的数据示例(即查询前的数据)。 – scsimon

+0

这是一个开始的好地方。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

回答

1
SELECT Name,[14] as 'Week 1',[15] as 'Week 2',[16] as 'Week 3' 
FROM (SELECT [Name],DATEPART (WK,c.date) as 'Week' 
    FROM Account a --Highlight this subquery to determine the week numbers 
     JOIN [CALL] c ON a.AccountId = c.f_accountId 
    WHERE [master] = 2 
    ) p 
PIVOT 
(
COUNT(WEEK) 
FOR WEEK IN ([14],[15],[16]) --These numbers are the week numbers 
) as pvt 
+0

谢谢。这工作完美。我对SQL中的PIVOT一无所知。我将不得不阅读有关这方面的一些材料。 – DoArNa