0

誰かがこのクエリで私を助けてくれることを願っています. 基本的に、「結合」したいクエリが 2 つあります。最初のクエリとともに、2 番目のクエリを追加の列として使用したいと考えています。最初のものはこれです:

SELECT t_Item_Storage_Location.Storage_Loc_Nbr, 
t_Storage_Location.Storage_Loc_Type_Code, 
Count(t_Load.Load_Id) AS CurrentLoadCount,
t_load.MMM_Id_Nbr

FROM t_Load INNER JOIN (t_Storage_Location INNER JOIN t_Item_Storage_Location ON 
t_Storage_Location.Storage_Loc_Nbr = t_Item_Storage_Location.Storage_Loc_Nbr) ON 
(t_Load.Storage_Loc_Nbr = t_Item_Storage_Location.Storage_Loc_Nbr) 
AND (t_Load.MMM_Id_Nbr = t_Item_Storage_Location.MMM_Id_Nbr)


where ((((t_Item_Storage_Location.MMM_Id_Nbr) Between '702004%' And '702011%') 
AND ((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%A') 
AND ((t_Storage_Location.Storage_Loc_Type_Code)='CD') 
AND ((t_Load.Active_Status_Ind)='A') 
AND ((t_Load.QC_Status_Code) Like 'R%') 
AND ((t_Load.MMM_Facility_Code)='MC')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%B'))
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%C')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%D')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%E'))

)
GROUP BY t_Item_Storage_Location.MMM_Id_Nbr,
t_Item_Storage_Location.Storage_Loc_Nbr, 
t_Storage_Location.Storage_Loc_Type_Code,
t_Load.MMM_Facility_Code,
t_load.MMM_Id_Nbr

HAVING
Count(t_Load.Load_Id)<4

2 番目のものは、最初のものの t_load.MMM_Id_Nbr に基づいています。基本的に、その mmm_id_nbr を持つすべての負荷の数が必要です。

SELECT count(Load_ID) as LoadCount, MMM_Id_Nbr, storage_Loc_Nbr
FROM t_load 
WHERE QC_Status_Code like 'R%' and mmm_Facility_Code ='MC' and Active_Status_Ind='A'
GROUP by MMM_Id_Nbr, storage_loc_Nbr
4

4 に答える 4

0

これはヘルプではなくアドバイスとして受け取ってください。クエリが最適化されていません。データベース構造を再考する必要があるかもしれません

于 2012-10-17T22:57:59.723 に答える
0

さて、私はあなたの質問に答えることができます

このようなもので別のクエリに参加できます

Select KeyColumn,Column1 From Table1
left Join ( Select ForeignKeyColumn, Count(*) From Table2 Group By ForeignKeyColumn) dummyTableName
On Table1.KeyColumn = dummyTableName.ForeignKeyColumn

このテクニックをあなたのクエリに適用する方法を正確に理解するつもりでしたが、私の指は反抗しました。

簡単なヒント

OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%B'))
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%C')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%D')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%E'))

で置き換えることができます

OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%[BCDE]'))

例えば

于 2012-10-17T23:09:02.357 に答える
0

私は今、このようなサブクエリを行いました:

Select b.Storage_Loc_Nbr, b.CurrentLoadCount,
(SELECT count(Load_ID) as LoadCount 
FROM t_load c
WHERE b.MMM_Id_Nbr=c.MMM_Id_Nbr

)as CountOtherLoc

FROM
(

SELECT * FROM

(

SELECT t_Item_Storage_Location.Storage_Loc_Nbr, 
t_Storage_Location.Storage_Loc_Type_Code, 
Count(t_Load.Load_Id) AS CurrentLoadCount,
t_load.MMM_Id_Nbr

FROM t_Load INNER JOIN (t_Storage_Location INNER JOIN t_Item_Storage_Location ON 
t_Storage_Location.Storage_Loc_Nbr = t_Item_Storage_Location.Storage_Loc_Nbr) ON 
(t_Load.Storage_Loc_Nbr = t_Item_Storage_Location.Storage_Loc_Nbr) AND      (t_Load.MMM_Id_Nbr = t_Item_Storage_Location.MMM_Id_Nbr)


where ((((t_Item_Storage_Location.MMM_Id_Nbr) Between '702004%' And '702011%') 
AND ((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%A') 
AND ((t_Storage_Location.Storage_Loc_Type_Code)='CD') 
AND ((t_Load.Active_Status_Ind)='A') 
AND ((t_Load.QC_Status_Code) Like 'R%') 
AND ((t_Load.MMM_Facility_Code)='MC')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%B'))
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%C')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%D')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%E'))

 ...

as a

)  
as b

それは私が望むものを私に与えていますが、countOtherLoc列には私が持っていたwhere条件がなく、このタイプのサブクエリでは複数を使用できません。4行目の下に「WHERE QC_Status_Code like 'R%' and mmm_Facility_Code ='MC' and Active_Status_Ind='A' を追加する必要がありますが、それは私を許しません。何かアイデアはありますか?

于 2012-10-18T21:55:44.140 に答える
-1

クエリにいくつかの間違いがありますか?LIKE クエリで AND の後に OR を使用するのはなぜですか。クエリは完全にばかです。

これを LIKE クエリのように考えてみましょう:

where [...]
AND ((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%A') 

[....]

# what about above on %A ?
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%B'))
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%C')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%D')) 
OR (((t_Item_Storage_Location.Storage_Loc_Nbr) Like '%E'))

A で終わる文字列を正確に検索したいのです%Aが、OR 句で他のクエリ検索について何もインポートしていませんか? これは適切なクエリではなく、正しく設定されていません。

GROUP BYあまりにも多くの結果のためにサーバーを生成する可能性があります。あなたはキラーですか?

Like を使用する場合は、あまりにも多くのオプションに対して Like の代わりに REGEXP を使用する必要があります。適切に SQL を最適化するためのいくつかの基本事項を見逃しています。

于 2012-10-17T23:04:15.323 に答える