-1

3つの列を含むテーブルを取得しました。

NameColumn  CategoryColumn  QuantityColumn
Name1       Category1   5
Name2       Category1   8
Name3       Category1   10
Name4       Category2   3
Name5       Category2   15
Name6       Category2   7

上記のデータを次の結果セットに変換するクエリを作成する必要があります。

NameColumn  CategoryColumn  QuantityColumn
Category1   NULL        NULL
Name1       NULL        5
Name2       NULL        8
Name3       NULL        10
Category2   NULL        NULL
Name4       NULL        3
Name5       NULL        15
Name6       NULL        7

カーソルを使用せずにこれを行う方法はありますか?ありがとう。

4

2 に答える 2

2
SELECT NameColumn, CategoryColumn, QuantityColumn
FROM
(
    SELECT CategoryColumn AS NameColumn, NULL AS CategoryColumn, NULL AS QuantityColumn,
        CategoryColumn AS _cat, 1 AS _iscat
    FROM myTable
    GROUP BY CategoryColumn
    UNION ALL
    SELECT NameColumn, NULL AS CategoryColumn, QuantityColumn, 
        CategoryColumn AS _cat, 0 AS _iscat
    FROM myTable
) x
ORDER BY _cat, _iscat DESC

SQLフィドルの例

于 2012-11-16T05:03:43.863 に答える
0

可能ですが、出力にメタデータ列を追加しない限り、あまり役に立ちません。

  select NameColumn, CategoryColumn, QuantityColumn, 0 IsCategory
    from tbl
   union all
  select distinct CategoryColumn, CategoryColumn, null, 1
    from tbl
order by CategoryColumn, IsCategory desc, NameColumn;

確かに、正確な出力順序を取得するには、特定の列を省略してNULL化できます。

  select NameColumn, NULL as CategoryColumn, QuantityColumn
    from (
  select NameColumn, CategoryColumn, QuantityColumn, 0 IsCategory
    from tbl
   union all
  select distinct CategoryColumn, CategoryColumn, null, 1
    from tbl
         ) X
order by X.CategoryColumn, IsCategory desc, NameColumn;

ただし、SQL Serverの外部でデータを使用する場合は、メタデータを保持して、名前とカテゴリを元のカテゴリに関連付ける必要があります。IsCategoryは、CategoryColumnから選択されたヘッダーを識別するのにも役立ちます。

于 2012-11-16T05:07:17.090 に答える