3

私はここで狩りをしてグーグルで検索しましたが、何も見つかりませんでした。

私はCONCAT関数に出くわしましたが、私の会社はSQL Server 2008を実行しているので、それはオプションではありません:(

複数の列/行を出力するクエリがあり、結果をすべて 1 つの列に表示したいと考えています。

例:

SELECT client, owner, payer, status
FROM Main
WHERE status = 'Active'

結果:

client | owner | payer | status

1      |  2    |  3    | Active
10     |  11   | 12    | Active

私はそれがどのように見えるようにしたいです

ColumnX  |
1
2
3 
Active
10
11
12
Active

ご協力いただきありがとうございます。それが理にかなっていることを願っています:)

乾杯、マイケル

4

2 に答える 2

10

あなたが言及しているものは、として知られていUNPIVOTます。これは、列を取得して行に変換します。

SELECT value, field
FROM
(
  select cast(client as varchar(10)) client, 
    cast(owner as varchar(10)) owner, 
    cast(payer as varchar(10)) payer, 
    status
  from main
  where status = 'Active'
) x
unpivot
(
  value 
  for field in (client, owner, payer, status)
) u

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

UNPIVOT、一方の列に値のリストを表示し、もう一方の列に元の列を表示します。

で必要なことUNPIVOTは、すべてのフィールドが同じデータ型であることです。そのため、同じ列に表示できるようにデータ型の変換を実行する必要があります。

UNION ALLa を使用してこの操作を実行することもできますがcast()、データ型を同じにする必要があります。

SELECT cast(client as varchar(10)) value
FROM main
WHERE status = 'active'
UNION ALL
SELECT cast(owner as varchar(10)) value
FROM main
WHERE status = 'active'
UNION All
SELECT cast(payer as varchar(10)) value
FROM main
WHERE status = 'active'
UNION ALL
SELECT status
FROM main
WHERE status = 'active'

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

于 2012-08-24T00:04:14.387 に答える
1

SQL Pivot をご覧になりましたか? http://msdn.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

私の知る限り、テーブルを UnPivot する必要があります。これにより、大量のスタックが生成されます。

于 2012-08-24T00:02:06.570 に答える