1
Customers
id,name,orderid
----------------------
1,Ted, 1
2,Jen, 2

Orders
id,prodname
----------------------
1,widgetA
1,widgetC
2,widgetB
2,widgetA


desired results
name, prodname
----------------------
Ted, widgetA
' ', widgetC
Jen, widgetB
' ', widgetA

基本的に、顧客が複数の製品を持っている場合、顧客の名前を繰り返したくありません。これを行う方法はありますか?

解決:

Select 
    (CASE WHEN myrow=1 THEN Name ELSE ' ' END) AS Name,
    product
From
(
    Select 
        ROW_NUMBER() OVER (PARTITION BY c.Name ORDER BY c.Name) AS myrow,     
        o.productname AS product 
    FROM 
        Customers c JOIN 
        Orders o ON c.orderid = o.id 
) T1

Order By Name
4

2 に答える 2

1

あなたの質問に答えるために、別の解決策を使用する強いケースがありますが、SQL Serverを使用している場合は、「row_number()」を確認してください。SQL Serverは使用していませんが、次のようになります。

Select
    ROW_NUMBER() OVER (ORDER BY c.Name) AS myrow,
    if(myrow=1,name,' ') AS name,
    o.productname AS product
FROM
    Customers c JOIN
    Orders o ON c.orderid = o.id
于 2012-05-17T17:08:24.770 に答える
1

まず、ここに曖昧さがあります。テッドが 2 人いたらどうなると思いますか?

実行しているサーバーによって異なる場合がありますが、SQL でこれを行う方法はほとんどあります。しかし、私はそれに対して強くお勧めします。単一の結合を使用した単純で効率的なクエリ (インデックスが適切に設定されていると仮定) を、非常に複雑なものに変えてしまいます。

あなたが望むことは、ディスプレイ/消費者側で実際に行われるべきです。間違いなく解決策が得られますが、私は標準的な結合を使用します。前述のあいまいさを避けるために、顧客 ID も出力に追加します。

于 2012-05-17T16:54:22.550 に答える