我对SQL非常不满,但有一件事我不确定是否可能,所以我想我会在这里问一下另一个问题。
我需要将“Countries”作为每一行返回,然后每个Country有3列,记录另一个表的平均百分比。这很好,我可以毫无问题地做到这一点。
我被困住的地方是,我想每行重复3列,比方说,每个月。所以,实际上,我希望将3列嵌套在包含月份名称的更高级别列下。我需要的布局如下(“索引”列是公司1/2列中百分比的计算)
| January |
国家|公司1 |公司2 |索引|
这甚至可能吗?
答案 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值的唯一前缀
也许这种技术可以为您提供解决方案的基础?