各位,帮帮忙吧!又遇到麻烦了。
现在遇到个问题?如下的表结构
- SQL code
item value1 111 221 333 aa3 bb3 cc...11 !!11 @@想把它转成1 3 ... 1111 aa ... !! 22 bb ... @@33 cc ... NULL也就是item现在是列标题我现在想到是先行转列把所有的item都取出来,再通过表的列名把原表的数据塞进去。但是这样实在太麻烦了,有什么好办法吗?
[解决办法]
论坛N多了吧?
[解决办法]
- SQL code
create table t(item int,value varchar(10))insert into t select 1,'11'insert into t select 1,'22'insert into t select 1,'33'insert into t select 3,'aa'insert into t select 3,'bb'insert into t select 3,'cc'insert into t select 11,'!!'insert into t select 11,'@@'godeclare @sql varchar(8000)select @sql=isnull(@sql,'')+',['+rtrim(item)+']=max(case item when '+rtrim(item)+' then [value] end)' from (select distinct item from t) aset @sql='select '+stuff(@sql,1,1,'')+ ' from (select a.*,(select count(1) from t where item=a.item and [value]<=a.[value]) as id from t a) r group by id'exec(@sql)/*1 3 11 ---------- ---------- ---------- 11 aa !!22 bb @@33 cc NULL*/godrop table tgo
[解决办法]
[解决办法]
- SQL code
CREATE TABLE TB([item] VARCHAR(10), [value] VARCHAR(2))INSERT TB SELECT 'aa[fre]', '11' UNION ALL SELECT 'aa[fre]', '22' UNION ALL SELECT 'aa[fre]', '33' UNION ALL SELECT '3', 'aa' UNION ALL SELECT '3', 'bb' UNION ALL SELECT '3', 'cc' UNION ALL SELECT 'bb[qqq] ', '!!' UNION ALL SELECT 'bb[qqq] ', '@@'SELECT *,SEQ=ROW_NUMBER() OVER (PARTITION BY item ORDER BY GETDATE())INTO TCFROM TBDECLARE @STR VARCHAR(8000)SET @STR=''SELECT @STR=@STR+','+'MAX(CASE WHEN item='''+item+''' THEN value END) AS "'+item+'"'FROM TBGROUP BY item SET @STR=STUFF(@STR,1,1,'')EXEC('SELECT '+@STR+' FROM TC GROUP BY SEQ')DROP TABLE TB,TC/*3 aa[fre] bb[qqq] ---- ------- --------aa 11 !!bb 22 @@cc 33 NULL*/
[解决办法]
- SQL code
quotename:SQL2005关于quotename的用法 首先,sqlserver里的标识符有一定的规则,比如 你 create table abc 123(...) 那么中间含有空格,它不是符合规则的。 你会写做 create table [abc 123](....) 即以[]来定界标识符。quotename将 字串成为有效的标识符。 它有什么用呢? 我举个例子:你有个表名字叫做 aa[]bb 当某些应用动态语句查询时 你如何写呢 exec('select * from aa[]bb') ?Xset @sql='select * from ' + quotename('aa[]bb') exec(@sql) 当然你也可以直接写出转义的写法 select * from [aa[]]bb] 也就是说,quotename 使函数中的输入成为一个有效的标识符。 比如上例中 aa[]bb 不是一个有效的标识符。还有一点就是quotename函数有几种写法: quotename('aa') 生成的有效的标识符为 [aa] quotename('aa','') 生成的有效的标识符为 [aa] quotename('aa','''') 生成的有效的标识符为 'aa'