sql server动态创建列

sql server动态创建列,sql,Sql,我希望在给定的日期范围内,每个区域只有一行动态生成周列。这是我当前的输出 Shipment Region WeekNumber territory AccountName 1 BRK Week 1 March 2014 0002 RRTS 3 BRK Week 2 March 2014 0002 RRTS 1 BRK Week 3 March 2014 0002 RRTS 1 BRK Week 5 Ma

我希望在给定的日期范围内,每个区域只有一行动态生成周列。这是我当前的输出

Shipment    Region  WeekNumber  territory   AccountName
1   BRK     Week 1  March  2014 0002    RRTS
3   BRK     Week 2  March  2014 0002    RRTS
1   BRK     Week 3  March  2014 0002    RRTS
1   BRK     Week 5  March  2014 0002    RRTS
1   DED     Week 3  March  2014 0002    RRTS
14  EXP     Week 1  March  2014 0002    RRTS
25  EXP     Week 2  March  2014 0002    RRTS
15  EXP     Week 3  March  2014 0002    RRTS
20  EXP     Week 4  March  2014 0002    RRTS
3   EXP     Week 5  March  2014 0002    RRTS
14  LTL     Week 1  March  2014 0002    RRTS
19  LTL     Week 2  March  2014 0002    RRTS
质疑

谢谢!
我正在使用sql server 2008

您能显示所需的输出以及正在使用的查询吗?您的数据库引擎是相关的,而您没有提供它。您可以使用PIVOT来实现此目的…我在web上的一些示例中尝试了PIVOT,但不知道如何实现。谢谢看起来像sql server,这意味着pivot是一条必经之路。我建议从简单的事情开始,然后慢慢来。
SELECT 
count(*) as Count, p.regionid, 
CASE WHEN DATEPART(day,p.prodate) < 8 THEN CAST('Week 1  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
--convert(nvarchar,DATEPART(month,p.prodate))
     WHEN DATEPART(day,p.prodate) < 15 then CAST('Week 2  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
     --+ CAST(YEAR(p.prodate) AS VARCHAR(4)) + DATENAME(MONTH, p.prodate)
    WHEN  DATEPART(day,p.prodate) < 22 then CAST('Week 3  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
    WHEN  DATEPART(day,p.prodate) < 29 then CAST('Week 4  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
    ELSE CAST('Week 5  ' AS VARCHAR(20))+ DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
END as WeekNumber,a.territory,'rrts' from pros p inner join GTS_Account a on a.locationGTSNo = p.BillToCustNo
  where a.account like '%rrts%' and
  p.prodate between '2014-01-01' and '2014-02-28' group by 
  CASE WHEN DATEPART(day,p.prodate) < 8 THEN CAST('Week 1  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
     WHEN DATEPART(day,p.prodate) < 15 then CAST('Week 2  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
    WHEN  DATEPART(day,p.prodate) < 22 then CAST('Week 3  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
    WHEN  DATEPART(day,p.prodate) < 29 then CAST('Week 4  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
    ELSE CAST('Week 5  ' AS VARCHAR(20)) + DATENAME(MONTH, p.prodate) + CAST('  ' AS VARCHAR(4)) + CAST(YEAR(p.prodate) AS VARCHAR(4)) 
END

  ,a.territory, p.regionid
  order by p.regionid, weeknumber
Region  Territory   Week1   Week2   Week3   Week4   Week5   Week6
BRK            2      4     6       8       10      5       4
DED            2      7     5       4       7       7       2
EXP            2      1     1       2       4       5       6