2012-03-16 1 views
0

ここに質問とデータベースの情報があります。SQL:UNIONの使用

UNIONコマンドを使用して、顧客 'C001'の完全な文を準備します。次のように配置する必要があります。 (下に示す値が正しくないことに注意してください。)あなたが使用できる可能性があります「」またはNULL空白値のために - 必要な使用であれば0 enter image description here

ここでは、データベースの情報を持つWebページへのリンクです。 http://sqlzoo.net/5_0.htmまたは下記の画像を参照してください。ここで enter image description here

私が試したものである:ここでは

SELECT sdate AS LineDate, "delivery" AS LEGEND, price*quantity AS Total,"" AS Amount 
    FROM shipped 
    JOIN product ON (shipped.product=product.id) 
    WHERE badguy='C001' 
    UNION 
    SELECT rdate,notes, "",receipt.amount 
    FROM receipt 
    WHERE badguy='C001' 

は、私が戻って得るものです:

間違った回答。正解は5行です。

金額は、金額欄に右ていないようだと私はそれがUNION句2つの異なる日付列(SDATEとRDATEを使用しているため、日付によってデータを注文する方法を見つけ出すことはできません)。

+1

言葉のような宿題...それですか?もしそうなら、そのようにタグを付けてください。 –

+1

@JoachimIsaksson:これはオンラインのSQLチュートリアルです。http://sqlzoo.net/5.htmを参照してください。代わりに、著作権侵害です。 :-P – ruakh

+0

CREATE TABLEステートメントとINSERTステートメントを投稿した方が、おそらくもっと助けになるでしょう。 –

答えて

1

この例のデータは、日付と課金タイプによって集計されているようですが、group byを使用しているため、行が多すぎます。 また、列の別名(LineDate)で並べ替えることができ、order by句はunionのすべての行に適用されます。

SELECT sdate AS LineDate, "delivery" AS LEGEND, SUM(price*quantity) AS Total,"" AS Amount 
    FROM shipped 
    JOIN product ON (shipped.product=product.id) 
    WHERE badguy='C001' 
    GROUP BY sdate 
    UNION 
    SELECT rdate, notes, "",receipt.amount 
    FROM receipt 
    WHERE badguy='C001' 
    ORDER BY LineDate 
+0

実際にはorder-by句は必要ありません。私は数分前にこれを試しましたが、それはグループバイセクションを必要としました。結果は日付順ではありませんでしたが、気にしませんでした。 (そして、私はあなたが組合の第2ブランチでグループバイを使うことになっていると思われますが、その存在とその存在を区別する行はないので、確かに言えません) – ruakh

+0

すべての領収書を取得したいので、2番目の 'select'でグループを作成する必要はありません。 – Diego

+0

あなたはどのように知っていますか?すべての配達を日付別にグループ化する場合は、すべての領収書をタイプと日付でグループ化することもできます。 – ruakh

0

通常、ユニオンの各部分を別々に開発するのが最も簡単です。通貨列を分離するために「null」を使用することに注意してください。最初の選択で列の名前が付けられます。

select s.sdate as tr_date, 'Delivery' as type, sum((s.quantity * p.price)) as extended_price, null as amount 
    from shipped s 
    inner join product p on p.id = s.product 
    where badguy = 'C001' 
    group by s.sdate 
union all 
select rdate, notes, null, sum(amount) 
    from receipt 
    where badguy = 'C001' 
    group by rdate, notes 
order by tr_date 
関連する問題