SQL - 嵌套列可能吗?

时间:2015-02-06 12:08:13

标签: sql-server

我对SQL非常不满,但有一件事我不确定是否可能,所以我想我会在这里问一下另一个问题。

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

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

      |         January            | 

国家|公司1 |公司2 |索引|

这甚至可能吗?

1 个答案:

答案 0 :(得分: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 int=@startMonth

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

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

  SET @currentMonth=@currentMonth+1
END

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

这将为每个月添加3列,每列都有@currentMonth值的唯一前缀

也许这种技术可以为您提供解决方案的基础?