2015-02-06 78 views
2

我对SQL很满意,但有一件我不确定的事情是可能的,所以我想我会在这里再次问一个问题。SQL - 嵌套列可能吗?

我需要将“国家”作为每行返回,然后每个国家有3列记录来自另一个表的平均百分比。这很好,我可以做到这一点没有问题。

我被卡住的地方是,我想要重复每行3列,比方说,每个月。所以,实际上,我希望3列嵌套在包含月份名称的更高级别列中。我需要的布局如下(列“索引”是公司1/2列的百分比计算)

 |   January   | 

国家|公司1 |连队2 |首页|

这甚至可能吗?

+1

SQL Server与行和列一起工作,您似乎在讨论的是演示文稿,这可以通过Excel或Reporting Services来完成。 – 2015-02-06 12:09:49

+1

只有当你想自己管理它时,它是非常不推荐的,因为它与数据标准化和数据建模应该如何运作相冲突。你要做得更好,只需要更改演示文稿 – 2015-02-06 12:09:52

+0

感谢您的反馈,我们希望能够完成此任务,而无需在Excel中进行任何操作,但看起来好像这是唯一的方法! – Donald 2015-02-06 12:28:29

回答

2

可以实现这种动态SQL的事情,只是举例:

CREATE TABLE #Example (Country varchar(20)) 

DECLARE @sql nvarchar(max) 
DECLARE @prefix nvarchar(100) 
DECLARE @startMonth int=3 
DECLARE @endMonth int=6 

DECLARE @currentMonth [email protected] 

WHILE @currentMonth<@endMonth 
BEGIN 
    SET @prefix='Month'+CAST(@currentMonth AS varchar(10)) 
    SET @sql='ALTER TABLE #Example ADD' 
    +'['[email protected]+'_Company1] varchar(20)' 
    +',['[email protected]+'_Company2] varchar(20)' 
    +',['[email protected]+'_Index] int' 
    EXEC (@sql) 

    SET @sql='...' -- ... SQL to set values into the prefixed columns based upon your criteria 
    EXEC (@sql) 

    SET @[email protected]+1 
END 

select * from #Example -- The result with 3 columns per month 

这将从@currentMonth值

可能增加3列每月,每一个独特的前缀这种技术为您提供了解决方案的基础?