私は3つのテーブルを持っている、私が必要なものIDでグループ、および別のテーブルからの和(3テーブル合計)
Name - columns
Custpackingslipjour(table 1) - (deliverydate, dateclosed,, salesid)
Inventrans (Table 2) - (itemid, datephysical, transrefid)
Salesline (Table 3) - (lineamount, itemid, salesid
すべての3つのテーブルを含む単一のテーブルであり、そのような複数の冗長情報がありません同じsalesids、そして合計金額(salesline.lineamount)と、どこに私がdeliverdateとclosed date、datephysicalに基づいて結果を排除することができるかは、もともと私はこれを持っていました。
SELECT TOP (10) dbo.AX_CUSTPACKINGSLIPJOUR.DELIVERYDATE,
dbo.AX_SALESLINE.LINEAMOUNT, dbo.AX_INVENTTRANS.DATEPHYSICAL,
dbo.AX_INVENTTRANS.COSTAMOUNTPOSTED, dbo.AX_INVENTTRANS.ITEMID,
dbo.AX_INVENTTRANS.TRANSREFID, dbo.AX_CUSTPACKINGSLIPJOUR.SALESID
FROM dbo.AX_CUSTPACKINGSLIPJOUR
INNER JOIN
dbo.AX_SALESLINE ON dbo.AX_CUSTPACKINGSLIPJOUR.SALESID = dbo.AX_SALESLINE.SALESID
INNER JOIN
dbo.AX_INVENTTRANS ON dbo.AX_SALESLINE.ITEMID = dbo.AX_INVENTTRANS.ITEMID
しかし、salesidとitemidの間に1対多の関係があるため、同じ行の多くを含む表が生成されます。
だから私は私が後にしているように各salesidに関連付けられたアイテムの価値の合計をグループ化すると考えました。
ここにいくつかの他の投稿に基づいて、私はsalesidのlineamountの合計をsalesidでグループ化してみましたが、5分間の実行後、それは良い解決策ではないようでした。私はそれを間違ってやっています。
select top 10 s.SALESID,
SUM(sp.LINEAMOUNT) as 'TotalLineamount'
from AX_CUSTPACKINGSLIPJOUR as s
right outer join AX_SALESLINE as sp on s.SALESID=sp.SALESID
left outer join AX_INVENTTRANS as p on sp.ITEMID=p.ITEMID
where s.SALESID is not null
group by s.SALESID,sp.LINEAMOUNT
私がしようとしていることが不明な場合は、何か助けていただければ幸いです。
編集:@ coltechのアドバイスに従って、salesidで別名で試してみましたが、動作しませんでしたが、テストされました。私はトップ10
編集後の異なる(salesid)を挿入:Gavinsのアドバイスに続いて、私はまた、テーブルは、より良いテーブル名を一致させるための接頭辞を変更し
select top 10 cp.SALESID,
SUM(sl.LINEAMOUNT) as 'TotalLineamount'
from AX_CUSTPACKINGSLIPJOUR as cp
right outer join AX_SALESLINE as sl on cp.SALESID=sl.SALESID
left outer join AX_INVENTTRANS as it on sl.ITEMID=it.ITEMID
where cp.SALESID is not null
group by cp.SALESID
に変更しました。しかし、これはうまくいきません。 sl.LINEAMOUNT、it.DATEPHYSICAL、it.COSTAMOUNTPOSTED、it.ITEMID、it.TRANSREFIDとcp.SALESID
その後、私のような、でグループにこれらを含める必要があります。
select top 10 cp.SALESID,
SUM(sl.LINEAMOUNT) as 'TotalLineamount',
cp.DELIVERYDATE,
sl.LINEAMOUNT, it.DATEPHYSICAL,
it.COSTAMOUNTPOSTED, it.ITEMID,
it.TRANSREFID, cp.SALESID
from AX_CUSTPACKINGSLIPJOUR as cp
right outer join AX_SALESLINE as sl on cp.SALESID=sl.SALESID
left outer join AX_INVENTTRANS as it on sl.ITEMID=it.ITEMID
where cp.SALESID is not null
group by cp.SALESID, cp.DELIVERYDATE,sl.LINEAMOUNT, it.DATEPHYSICAL, it.COSTAMOUNTPOSTED, it.ITEMID, it.transrefid
ただし、このクエリは非常に長い時間実行され、25分近く実行されているように見えます。これをスピードアップする方法はありますか?それとも私はちょうどこれに間違って取り組んでいますか?
私はあなたがSELECT DISTINCT TOP(10)を試してみましたと仮定します。.. ..? – Coltech
@Coltechまあ、別の私の理解は、それが単一の列に基づいて単一のテーブル内のユニークなエントリを選択するために使用されるということです。私が達成しようとしているのは、3つのテーブルを組み合わせたsalesidのすべての異なるエントリを選択し、見つかった各salesidのライン数を合計することです。 – Tommy