2016-06-17 5 views
2

ではない少なくとも1つの列が含まれている必要があり、私はこのエラーにSQLエラー:式BY各グループが外部参照

を取得し、各グループBY式は、外部参照

ではない少なくとも1つの列が含まれている必要があります

このクエリの実行中に:

SELECT TOP 1 
    SUM(mla.total_current_attribute_value) 
FROM 
    partstrack_machine_location_attributes mla (NOLOCK) 
INNER JOIN 
    #tmpInstallParts_Temp installpartdetails ON mla.machine_sequence_id = installpartdetails.InstallKitToMachineSequenceId 
            AND (CASE WHEN mla.machine_side_id IS NULL THEN 1 
      WHEN mla.machine_side_id = installpartdetails.InstallKitToMachineSideId THEN 1 END 
    ) = 1 
INNER JOIN 
    partstrack_mes_attribute_mapping mam (NOLOCK) ON mla.mes_attribute = mam.mes_attribute_name 
INNER JOIN 
    partstrack_attribute_type at (NOLOCK) ON mam.pt_attribute_id = at.pt_attribute_id 
INNER JOIN 
    partstrack_ipp_mes_attributes ima(NOLOCK) ON at.pt_attribute_id = ima.pt_attribute_id             
WHERE 
    mla.active_ind = 'Y' AND 
    ima.ipp_ID IN (SELECT ipp.ipp_id 
        FROM partstrack_individual_physical_part ipp 
        INNER JOIN #tmpInstallParts_Temp tmp ON (ipp.ipp_id = tmp.InstallingPartIPPId OR 
       (CASE WHEN tmp.InstallingPartIPKId = '-1' THEN 1 END) = 1 
       ) 
GROUP BY 
    ima.ipp_id 

を誰かが私を助けることができますか?

答えて

1

これは、質問の最初のリビジョンのクエリのテキストです。 最新のリビジョンでは、最後の閉じ括弧)を削除し、クエリが構文的に正しくありませんでした。クエリのテキストを確認して修正し、クエリのテキストをフォーマットする方がよいので、読みやすくするにはです。

SELECT TOP 1 
    SUM(mla.total_current_attribute_value) 
FROM 
    partstrack_machine_location_attributes mla (NOLOCK) 
    INNER JOIN #tmpInstallParts_Temp installpartdetails 
     ON mla.machine_sequence_id = installpartdetails.InstallKitToMachineSequenceId 
     AND (CASE WHEN mla.machine_side_id IS NULL THEN 1 
      WHEN mla.machine_side_id = installpartdetails.InstallKitToMachineSideId THEN 1 END) = 1 
    INNER JOIN partstrack_mes_attribute_mapping mam (NOLOCK) ON mla.mes_attribute = mam.mes_attribute_name 
    INNER JOIN partstrack_attribute_type at (NOLOCK) ON mam.pt_attribute_id = at.pt_attribute_id 
    INNER JOIN partstrack_ipp_mes_attributes ima(NOLOCK) ON at.pt_attribute_id = ima.pt_attribute_id 
WHERE 
    mla.active_ind = 'Y' 
    AND ima.ipp_ID IN 
    (
     Select 
      ipp.ipp_id 
     FROM 
      partstrack_individual_physical_part ipp 
      INNER JOIN #tmpInstallParts_Temp tmp 
       ON (ipp.ipp_id = tmp.InstallingPartIPPId 
       OR (CASE WHEN tmp.InstallingPartIPKId = '-1' THEN 1 END) = 1) 
     GROUP BY 
      ima.ipp_id 
    ) 

このフォーマットでは、GROUP BYというサブクエリがあることが明らかになりました。

ほとんどの場合、それは入力ミスです.GROUP BY ima.ipp_idの代わりにGROUP BY ipp.ipp_idと書いてください。


あなたは本当にサブクエリでGROUP BYないを持っていると思ったが、主なSELECTに、あなたは閉じ括弧)を紛失し、クエリは次のようになります場合は、次のいずれにおいても

SELECT TOP 1 
    SUM(mla.total_current_attribute_value) 
FROM 
    partstrack_machine_location_attributes mla (NOLOCK) 
    INNER JOIN #tmpInstallParts_Temp installpartdetails 
     ON mla.machine_sequence_id = installpartdetails.InstallKitToMachineSequenceId 
     AND (CASE WHEN mla.machine_side_id IS NULL THEN 1 
      WHEN mla.machine_side_id = installpartdetails.InstallKitToMachineSideId THEN 1 END) = 1 
    INNER JOIN partstrack_mes_attribute_mapping mam (NOLOCK) ON mla.mes_attribute = mam.mes_attribute_name 
    INNER JOIN partstrack_attribute_type at (NOLOCK) ON mam.pt_attribute_id = at.pt_attribute_id 
    INNER JOIN partstrack_ipp_mes_attributes ima(NOLOCK) ON at.pt_attribute_id = ima.pt_attribute_id 
WHERE 
    mla.active_ind = 'Y' 
    AND ima.ipp_ID IN 
    (
     Select 
      ipp.ipp_id 
     FROM 
      partstrack_individual_physical_part ipp 
      INNER JOIN #tmpInstallParts_Temp tmp 
       ON (ipp.ipp_id = tmp.InstallingPartIPPId 
       OR (CASE WHEN tmp.InstallingPartIPKId = '-1' THEN 1 END) = 1) 
    ) 
GROUP BY 
    ima.ipp_id 

をソースコードの適切な書式設定が本当に役に立ちます。

+1

私は、GROUP BYがサブクエリ内にあることを意図していない可能性が高いと思っていました。なぜ彼らは集計を実行していないのでしょうか? )サブクエリが存在している'IN()'で使われているので、特定の値が繰り返される回数は、とにかく無関係です。基本的に、もしサブクエリに* * *置くつもりなら、それが達成すると思っていたことは私には非常に不透明で、間違いなく(それが何であれ)達成することはできません。 –

+0

@Damien_The_Unbeliever、ありがとう、私はそれについて考えなかった。実際に、OPが質問を編集し、最後の閉じ括弧を削除して(構文的に間違っている)、それを指摘するという事実。その2番目の推測を答えに加えました。クエリ自体は、それが実際に何をするのかとは何かを理解しようとするにはあまりにも面倒です。 –

0
Group By ima.ipp_id 

は、外部クエリに適用する必要があります。 。。

「(」は、内側のクエリに適用された

今すぐクエリを修正した後、それは何の問題もなく正常に動作していますが、誤った配置のため、最終的なクエリは、次のとおりです。

SELECT TOP 1 SUM(mla.total_current_attribute_value) FROM partstrack_machine_location_attributes mla (NOLOCK) INNER JOIN #tmpInstallParts_Temp installpartdetails ON mla.machine_sequence_id = installpartdetails.InstallKitToMachineSequenceId AND (CASE WHEN mla.machine_side_id IS NULL THEN 1 WHEN mla.machine_side_id = installpartdetails.InstallKitToMachineSideId THEN 1 END) = 1 INNER JOIN partstrack_mes_attribute_mapping mam (NOLOCK) ON mla.mes_attribute = mam.mes_attribute_name INNER JOIN partstrack_attribute_type at (NOLOCK) ON mam.pt_attribute_id = at.pt_attribute_id INNER JOIN partstrack_ipp_mes_attributes ima(NOLOCK) ON at.pt_attribute_id = ima.pt_attribute_id WHERE mla.active_ind = 'Y' AND ima.ipp_ID IN ( Select ipp.ipp_id FROM partstrack_individual_physical_part ipp INNER JOIN #tmpInstallParts_Temp tmp ON (ipp.ipp_id = tmp.InstallingPartIPPId OR (CASE WHEN tmp.InstallingPartIPKId = '-1' THEN 1 END) =1) ) GROUP BY ima.ipp_id

感謝あなたはすべてです。

+0

あなたの答えを覚えておいてください。正しい答えです。 –

関連する問題