【发布时间】:2017-01-24 04:07:36
【问题描述】:
IF OBJECT_ID('tempdb..#temp1') IS NOT NULL DROP TABLE #temp1
GO
CREATE TABLE #TEMP1
(
COUNTER nvarchar(200),SEQUENCE INT
)
INSERT INTO #TEMP1 VALUES ('Counter1','1')
INSERT INTO #TEMP1 VALUES ('Counter2','2')
INSERT INTO #TEMP1 VALUES ('Counter3','3')
INSERT INTO #TEMP1 VALUES ('Counter4','4')
INSERT INTO #TEMP1 VALUES ('Counter5','5')
INSERT INTO #TEMP1 VALUES ('Counter6','6')
INSERT INTO #TEMP1 VALUES ('Counter7','7')
INSERT INTO #TEMP1 VALUES ('Counter8','8')
INSERT INTO #TEMP1 VALUES ('Counter9','9')
INSERT INTO #TEMP1 VALUES ('Counter10','10')
--select * from #TEMP1
DECLARE @query AS NVARCHAR(MAX)=''
DECLARE @Counter nvarchar(1000)
DECLARE @Cols As NVARCHAR(MAX)=''
declare MyCursor cursor
for SELECT DISTINCT A.SEQ
FROM tblSEQUENCE A
open MyCursor
fetch next from MyCursor into @Counter
while @@FETCH_STATUS=0
BEGIN
Set @Cols = @Cols + 'Counter'+@Counter+''
fetch next from MyCursor into @Counter
END
CLOSE MyCursor;
DEALLOCATE MyCursor
set @Cols= stuff(@Cols,len(@Cols),1,'')
print @Cols
set @query = 'SELECT ' + @cols + ' FROM (select B.METER_VALUE As VALUE,A.SEQ AS SEQUENCE,T.COUNTER AS COUNTER
from tblCOUNTER B,tblSEQUENCE A INNER JOIN #TEMP1 T
ON A.SEQ=T.SEQUENCE)
x
pivot
(
max(VALUE)
for COUNTER in (' + @cols + ')
) p '
--print @query
execute(@query)
我需要根据序列将最大值旋转到相应的计数器。
我的结果需要看起来像
Counter_1 Counter_2 Counter_3 Counter_4 Counter_5
29823 29823 29823 29823 29823
我怎样才能做到这一点?我经常收到错误太长。最大长度为 128
【问题讨论】:
-
请使用代码格式化程序格式化您的代码,并粘贴您的确切错误消息。干杯!
-
请添加示例数据以及tblSEQUENCE表的结构
-
Msg 103, Level 15, State 4, Line 1 以“Counter1Counter2Counter3Counter4Counter5Counter6Counter7Counter8Counter9Counter10”开头的标识符太长。最大长度为 128。我知道我指定的列已达到最大限制。但是如何更正这一点并为相同的值提供枢轴值呢?提前非常感谢
-
tblSequence 包含 SEQ 1-10。就是这样。谢谢
-
tblCOUNTER 表中有哪些值?
标签: mysql sql sql-server tsql