2017-04-11 4 views
0

私は非常にSQLに慣れていて、組合を使って拡大しようとしているので、私が組合で望む結果を得ることができるかどうかは100%確信していません。SQL Unionは私が望むように機能しませんか?

私のコードは以下の通りです: enter image description here

あなたはそれが4つの個々のレコードに結果を置く見ることができるように、私は上の結果を望んでいる:

select workorder.wonum, null as description, null as quantity, null as unitcost, null as matlincost2, null as matlinprice, 
    labtrans.refwo, labtrans.startdate, labtrans.starttime, labtrans.finishtime, labtrans.regularhrs, labtrans.plusplineprice, labtrans.laborcode, labtrans.linecost as labline 
    from workorder 
    left join labtrans on labtrans.refwo=workorder.wonum and labtrans.siteid=workorder.siteid 
    where workorder.wonum='10192' 
    union 
    select matusetrans.refwo, matusetrans.description, matusetrans.quantity, matusetrans.unitcost, matusetrans.linecost as matlincost2, matusetrans.plusplineprice as matlinprice, 
    null as refwo, null as startdate, null as starttime, null as finishtime, null as regularhrs, null as plusplistprice, null as laborcode, null as labline 
    from matusetrans 
    where matusetrans.refwo='10192' 
    ; 

私の結果は以下のとおりです。それが理にかなっているならば、2つの記録しかない。

ユニオンを使用してこれを行うことはできますか? 私は結合の代わりに結合を試みましたが、とにかく4つのレコードを持ち込みます。

+2

「結合」ではなく「連合」を使用する必要があります。 – Jens

+0

サンプルテーブルのデータと期待される結果を追加してください。 – jarlh

+0

それはうまくいった感謝です - ちょうどそれが私がやっていることのためであると言われました – Karen

答えて

1

あなたの組合は結果を出します。 あなたはヌルを見るためにしなければならない。労働組合の

select workorder.wonum, **null as description**, null as quantity, null as unitcost, null as matlincost2, null as matlinprice, 
labtrans.refwo, labtrans.startdate, labtrans.starttime, labtrans.finishtime, labtrans.regularhrs, labtrans.plusplineprice, labtrans.laborcode, labtrans.linecost as labline 
from workorder 
left join labtrans on labtrans.refwo=workorder.wonum and labtrans.siteid=workorder.siteid 
where workorder.wonum='10192' 

最初の部分、説明(3および4行)でnullを返します。行のrefwoでヌル

select matusetrans.refwo, matusetrans.description, matusetrans.quantity, matusetrans.unitcost, matusetrans.linecost as matlincost2, matusetrans.plusplineprice as matlinprice, 
**null as refwo**, null as startdate, null as starttime, null as finishtime, null as regularhrs, null as plusplistprice, null as laborcode, null as labline 
from matusetrans 
where matusetrans.refwo='10192' 

リターン1と2

連合(EU)は、selectからすべての結果を選択し、他の選択、追加作品:いないグループのデータを、唯一の追加。あなたが持っている場合

、ポル例は、 は 連合(EU)は3行

リターンは8行で選択して選択し 5行を選択します。

@jensのように結合を使うことはできませんし、結合後にグループを作成することも、選択したフィールドとは別のものを使うこともできます。必要なものを分析する必要があります。

関連する問題