1

重複の可能性:
複数の列を複数の行に分割

私のテーブルはこんな感じ

accounting | research | sales | operations 
------------------------------------------
         3 |        5 |     6 |          0

2列4行の結果セットを受け取る必要があります

dname      |        cnt
-----------------------
accounting |          3
research   |          5
sales      |          6
operations |          0
4

2 に答える 2

1

UNPIVOT次のようにテーブル演算子を使用します。

DECLARE @t table (accounting int, research int, sales int, operations int);

INSERT INTO @t VALUES(3, 5, 6, 0);

   SELECT dname, cnt
    FROM
    (
       SELECT accounting, research, sales, operations 
       FROM @t
    ) t 
    UNPIVOT
    (
      cnt FOR dname IN (accounting, research, sales, operations )
    ) u

これがライブデモです

UNPIVOTテーブル演算子をサポートしないRDBMSの場合、これを行うための標準のSQLクエリは次のとおりです。

SELECT dname,
  CASE dname
    WHEN 'accounting' THEN accounting 
    WHEN 'research'   THEN research
    WHEN 'sales'      THEN sales
    WHEN 'operations' THEN operations
  END AS cnt
FROM @t
CROSS JOIN
(
   SELECT 'accounting' dname
   UNION ALL SELECT 'research' 
   UNION ALL SELECT 'sales' 
   UNION ALL SELECT 'operations'
) t2
WHERE dname IS NOT NULL

ライブデモ

于 2012-09-30T11:53:32.323 に答える
1

すべてのRDBMSに関数があるわけではないので、演算子がUNPIVOTない場合にこれを行う別の方法は次のとおりです。UNPIVOTUNION ALL

select 'accounting' dname, IsNull(accounting, 0) cnt
from yourtable
union all
select 'research' dname, IsNull(research, 0) cnt
from yourtable
union all
select 'sales' dname, IsNull(sales, 0) cnt
from yourtable
union all
select 'operations' dname, IsNull(operations, 0) cnt
from yourtable

SQL FiddleWithDemoを参照してください

于 2012-09-30T12:24:16.267 に答える