0

MSSQL 2005 でクエリ結果にプライマリ行を追加するにはどうすればよいですか。何を返す必要があるかの例を次に示します。

ここに2つのクエリがあります

クエリ 1

select product_id, sku from products

クエリ 2

select product_id, sku from childproducts

結果は次のようになります。(もちろん、クエリ1なしで)

    row 1: products.product_id, products.sku   (comes from one parent table)
    row 2: childproducts.product_id, childproducts.sku   (comes from child table)
    row 3: childproducts.product_id, childproducts.sku   (comes from child table)
4

2 に答える 2

0

UNIONALLを使用してそれらを組み合わせることができます。

select 1 as Sorter, product_id, sku from products
UNION ALL
select 2, product_id, sku from childproducts
ORDER BY Sorter, product_id

子製品の前に親セットが表示されるように、Sorter列を追加したことに注意してください。除外する必要があるが、それでもこの順序で表示する場合:

select product_id, sku
from (
    select 1 as Sorter, product_id, sku from products
    UNION ALL
    select 2, product_id, sku from childproducts
) X
ORDER BY Sorter, product_id
于 2012-09-30T23:00:30.723 に答える
0

私が正しく理解していれば、行の順序を維持する主キーを追加して、子がすぐに親の後に続くようにします。次のコードは、これを使用row_number()して新しいIDを割り当てます。

select row_number() over (order by parentproduct_id, isparent desc) as newid,
       product_id, sku
from ((select product_id, sku, product_id as parentproduct_id, 1 as isparent
       from productions
      ) union all
      (select product_id, sku, parentproduct_id, 0 as isparent
       from childproducts
      )
     ) p

データに実際にはIDは必要ないが、並べ替え順序だけが必要な場合は、次を追加します。

order by parentproduct_id, isparent desc
于 2012-09-30T23:06:13.950 に答える