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