A crosstab

xiaoxiao2021-03-06  69

A crosstalk. Use the field as the value: Original table data: Field 1 field 2 field 3 A1 B1 C1 A2 B2 C2 Transform: Col1 Col2 COL3 Field 1 A1 A2 Field 2 B1 B2 Field 3 C1 C2CREATE TABLE TABLENAME (field 1 varchar (100), field 2 varchar (100), field 3 varchar (100)) INSERT TABLENAME SELECT 'GSM900 / 1800MHZ / GPRS', '85 * 44 * 21mm ',' 80 'Union All Select' GSM900 / 1800MHz / GPRS ', '82 * 46 * 21.5mm', '79' Go

Select Top 0 Field Name = a.Name INTO ABC from Syscolumns A Inner Join Sysobjects D on A.ID = D.ID Left Join Sysproperties f on D.Id = f.id and f.smallid = 0 Where d.XType = ' U 'and d.name =' Tablename 'Order by A.ID, A.COLORDER

Select Top 0 Note = a.Name Inner Join Sysobjects D on A.Id = D.ID Left Join Sysproperties f on d.id = f.id and f.smallid = 0 Where d.Xtype = 'u '- Represents User Type and D.Name =' Tablename '- You need to get the table for the field order by A.ID, A.ColOrder

Declare @num int, @name varchar (200), @name1 varchar (200), @count int, @ Num1 varchar (5) SELECT @num = 1

Select @count = count (*) from tablename

While (@count> 0) Begin select @col = 'col' convert (varchar, @num) Exec ('ALTER TABLE ABC ADD [' @col '] varchar (200) null') Select @num = @ Num 1 set @count = @count - 1nd

DECLARE AddNameColumns_Cursor INSENSITIVE CURSOR - field values ​​taken FOR SELECT filedname = a.name FROM syscolumns a inner join sysobjects d on a.id = d.id left join sysproperties f on d.id = f.id and f.smallid = 0 where d.xtype = 'U' and d.name = 'tablename' order by a.id, a.colorder OPEN AddNameColumns_Cursor BEGIN FETCH NEXT FROM AddNameColumns_Cursor INTO @Name - field values ​​corresponding to the respective WHILE @@ FETCH_STATUS = 0 BEGIN insert into abc (Field Name) SELECT FNAME = @namedelete Abcd Exec ('INSERT INTO ABCD (NOTE) SELECT NAME = [' @Name '] from table name ') select @num = 1 DECLARE AddNameColumns_Cursor1 INSENSITIVE CURSOR FOR select note from abcd OPEN AddNameColumns_Cursor1 BEGIN FETCH NEXT FROM AddNameColumns_Cursor1 INTO @ Name1 WHILE @@ FETCH_STATUS = 0 BEGIN

SELECT @ Num1 = Convert (varchar, @num) EXEC ('update abc set [col' @ Num1 '] =' ' @ Name1 ' '' WHERE field name = '' @name '' ' ') Print' Update ABC SET [' @col '] = '' ' @ Name1 ' '' WHERE Field Name = '' @name '' '

SELECT @num = @num 1

Fetch next from addnamecolumns_cursor1 inTo @ name1 End end closed address addnamecolumns_cursor1

Fetch next from addnamecolumns_cursor @name end end @name end end dDNAMECOLUMNS_CURSOR Deallocate AddnameColumn_cursor

Select * from abcselect * from tablename

Drop Table TablenaMedrop Table Abcdrop ​​Table Abcd

转载请注明原文地址:https://www.9cbs.com/read-88322.html

New Post(0)