Tsql 我怎样才能解决这个问题?
我有一个表,包括1列ID和12列Month01到Month12。如果我有一个参数@month=9,那么在没有Month10、Month11、Month12的情况下,我如何比较得到Month01到Month09列。请帮帮我 您也可以尝试一下:Tsql 我怎样才能解决这个问题?,tsql,Tsql,我有一个表,包括1列ID和12列Month01到Month12。如果我有一个参数@month=9,那么在没有Month10、Month11、Month12的情况下,我如何比较得到Month01到Month09列。请帮帮我 您也可以尝试一下: DECLARE @month int = 9 DECLARE @Sql nvarchar(100) ='' DECLARE @pos int = 1 WHILE(@pos <= @month) BEGIN SET @Sql = @Sql + (
DECLARE @month int = 9
DECLARE @Sql nvarchar(100) =''
DECLARE @pos int = 1
WHILE(@pos <= @month)
BEGIN
SET @Sql = @Sql + (',month' + right('00'+ rtrim(@pos), 2))
SET @pos = @pos + 1
END
SET @Sql= 'SELECT ID ' +@Sql + ' FROM table'
EXEC sp_executesql @Sql
Simo的答案更为优雅,但下面是实现这一点的另一种基本方法: 声明@month INT 设置@month=9 如果@Month=1 开始 选择Id,01月 来自MonthlyData 终止 如果@Month=2 开始 选择Id、Month01、Month02 来自MonthlyData 终止 -重复3-9个月 如果@Month=9 开始 选择Id、Month01、Month02、Month03、Month04、, 05月、06月、07月、08月、09月 来自MonthlyData 终止 -重复10-12个月 请参阅我的。是否应该筛选对象id上的sys.columns?如果另一个表有一个名为MonthValue的列,该怎么办?
DECLARE @month int
DECLARE @tableName nvarchar(128)
SET @month = 9;
SET @tableName = 'months' -- YOUR TABLE's NAME
DECLARE @query nvarchar(2048)
SET @query =
'SELECT id, ' + STUFF((SELECT DISTINCT ', ' + name
FROM sys.columns WHERE name LIKE'Month%'
AND object_id = OBJECT_ID(@tableName)
AND CONVERT(INT, RIGHT(name, 2)) <= @month
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')
+ ' FROM ' + @tableName;
EXEC(@query)
declare @str varchar(1000)
SELECT @str= coalesce(@str + ', ', '') + a.name
FROM (
Select name from sys.columns
where object_id = OBJECT_ID('table_months')
and isnumeric(right(name,2))= 1 and name like 'month%'
and cast(right(name,2) as int) < '03') a
declare @sql nvarchar(100)
set @sql = 'select ID, '+ @str+' from table_months'
exec sp_executesql @sql