2

一部のデータを分割する方法を理解するのに助けが必要です

データは現在このようになっています

╔═════════════════════════════════════════════╗
║ Name Data1 Data2 Data3 Field1 field2 Field3 ║
╠═════════════════════════════════════════════╣
║ a     1      2     3     x      y      z    ║
╚═════════════════════════════════════════════╝

このようにデータを分割する必要があります

+-----------------+
| name data field |
+-----------------+
| a     1     x   |
| a     2     y   |
| a     3     z   |
+-----------------+

誰でもこれで私を助けることができます

4

2 に答える 2

7

SQL Server のバージョンによって異なります。SQL Server 2008 以降では、次を使用してデータのピボットCROSS APPLYを解除できます。

SELECT t.name,
  x.Data,
  x.Field
FROM YourTable t
CROSS APPLY 
(
    VALUES
        (t.Data1, t.Field1),
        (t.Data2, t.Field2),
        (t.Data3, t.Field3)
) x (Data, Field);

SQL Fiddle with Demoを参照してください。

これは、SQL Server 2005+のUNPIVOTおよび関数を使用して行うこともできます。PIVOT

select name, data, field
from
(
  select name, left(col, len(col) -1) col, value,
    row_number() over(partition by left(col, len(col) -1) order by col) rn
  from
  (
    select name, 
      cast([Data1] as varchar(10)) Data1, 
      cast([Data2] as varchar(10)) Data2, 
      cast([Data3] as varchar(10)) Data3, 
      [Field1], [field2], [Field3]
    from yourtable
  ) src
  unpivot
  (
    value
    for col in ([Data1], [Data2], [Data3], 
                [Field1], [field2], [Field3])
  ) unpiv
) u
pivot
(
  max(value)
  for col in (data,field)
) piv

デモで SQL Fiddle を参照してください

両方とも結果が得られます。

| NAME | DATA | FIELD |
-----------------------
|    a |    1 |     x |
|    a |    2 |     y |
|    a |    3 |     z |
于 2013-02-15T19:36:53.317 に答える
3

これを行うには多くの方法があります (bluefeet の回答を見てください) が、簡単な方法は以下を使用できますUNION ALL

SELECT [Name], Data1 AS Data, Field1 AS Field
FROM YourTable
UNION ALL
SELECT [Name], Data2 AS Data, Field2 AS Field
FROM YourTable
UNION ALL
SELECT [Name], Data3 AS Data, Field3 AS Field
FROM YourTable

そして、これはデモのフィドルです(bluefeet 提供)。

于 2013-02-15T19:34:27.560 に答える