2010-10-18 24 views
5

Tablo:sütun?

CREATE TABLE Table1 (
    col1 INT, 
    col2 nvarchar(10), 
    col3 INT, 
    col4 INT 
); 

INSERT INTO Table1 
    (col1, col2, col3, col4) 
VALUES 
    (1, 'welcome', 3, 4); 

Benim tablo farklı veri türüne sahip, col2 i yapabilirsiniz nvarchar h ... olduğunu

sonucu:

col value 
--------------- 
col1 1 
col2 welcome 
col3 3 
col4 4 
+0

nasıl ne yapabilirim almak için UNPIVOT işlemini kullanabilir ? –

cevap

14

Sen sonuçları

SELECT col, value 
FROM 
    (SELECT CAST(col1 AS VARCHAR) AS col1, CAST(col2 AS VARCHAR) AS col2, 
     CAST(col3 AS VARCHAR) AS col3, CAST(col4 AS VARCHAR) AS col4 
    FROM Table1) p 
UNPIVOT 
    (value FOR col IN 
     (col1, col2, col3, col4) 
) AS unpvt; 
1

Kullanım:

SELECT 'col1' AS col, 
     CAST(t1.col1 AS NVARCHAR(10)) AS value 
    FROM TABLE_1 t1 
UNION ALL 
SELECT 'col2' AS col, 
     t2.col2 AS value 
    FROM TABLE_1 t2 
UNION ALL 
SELECT 'col3' AS col, 
     CAST(t3.col3 AS NVARCHAR(10)) AS value 
    FROM TABLE_1 t3 
UNION ALL 
SELECT 'col4' AS col, 
     CAST(t4.col4 AS NVARCHAR(10)) AS value 
    FROM TABLE_1 t4 

Sorunun bir kısmı, ikinci sütunu aynı veri türünü yapmanız gerektiğidir:

0
with rows(n) 
as 
(
    select 1 
    union all 
    select n + 1 
    from rows 
    where n + 1 <= 4 
) 
    select case n 
      when 1 then 'col1' 
      when 2 then 'col2' 
      when 3 then 'col3' 
      when 4 then 'col4' 
      end as col, 
      case n 
      when 1 then col1 
      when 2 then col2 
      when 3 then col3 
      when 4 then col4 
      end as value 
    from 
(
    select cast (col1 as varchar) col1, 
     col2, 
     cast (col3 as varchar) col3, 
     cast (col4 as varchar) col4, 
     n 
    from table1, rows 
) x