Sql server SQL嵌套列是否可能?

Sql server SQL嵌套列是否可能?,sql-server,Sql Server,我对SQL相当熟悉,但有一件事我不确定是否可能,所以我想我应该试试问另一个问题 我需要在每一行返回“Countries”,然后为每个国家创建3列,记录另一个表中百分比的平均值。这很好,我可以毫无问题地做到 我陷入困境的地方是,我希望每行重复3列,比如说,每个月。因此,实际上,我希望这3列嵌套在包含月份名称的更高级别的列下。我需要的布局如下(“索引”列是公司1/2列百分比的计算) 国家|公司1 |公司2 |指数| 这可能吗?您可以使用动态SQL实现这类功能,例如: CREATE TABLE #Ex

我对SQL相当熟悉,但有一件事我不确定是否可能,所以我想我应该试试问另一个问题

我需要在每一行返回“Countries”,然后为每个国家创建3列,记录另一个表中百分比的平均值。这很好,我可以毫无问题地做到

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

国家|公司1 |公司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
CREATE TABLE#示例(Country varchar(20))
声明@sql nvarchar(最大值)
声明@prefix nvarchar(100)
声明@startMonth int=3
声明@endMonth int=6
声明@currentMonth int=@startMonth

当@currentMonthSQL Server处理行和列时,您似乎在谈论的是演示,它将在Excel或Reporting Services中完成。只有当您想自己管理它时,才强烈建议不要使用它,因为它与数据规范化和数据建模的工作方式相冲突。如果你做得正确,只需改变表现形式就更好了谢谢你的反馈,你希望不用在excel或其他任何东西中操作就可以完成,但看起来这似乎是唯一的方法!这是将表示与数据逻辑分开的更好方法
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