0

こんにちは、cTL列の値を取得するためにサブクエリを実行していますが、正しい応答のためにサブクエリの外側の列の値が必要ですが、SC変数とRC変数を認識しないというエラーが発生します。逃げ道はありますか?

SELECT DISTINCT(cStoreCode) as SC
    ,cRetailerCode as RC
    , cStoreCode + ' - ' + cStoreName AS Store,
    x.TeamLead 
FROM
(
    SELECT cTL as TeamLead 
    FROM tblEmpSchedule 
    WHERE   cRepCode LIKE @repCode AND
        cClientCode LIKE @gCode AND
        cProjectCode LIKE @pCode AND
        cYear LIKE @year AND
        cCycleNo LIKE @cycleNo AND
        cRetailerCode LIKE @retailerCode AND
        cStoreCode = SC AND
        cRetailerCode = RC
 )x
,tblEmpSchedule 
WHERE cRepCode LIKE @repCode AND
    cClientCode LIKE @gCode AND
    cProjectCode LIKE @pCode AND
    cYear LIKE @year AND
    cCycleNo LIKE @cycleNo AND
    cRetailerCode LIKE @retailerCode AND
    cStoreCode <> '' AND cStoreCode is Not Null
ORDER BY cStoreCode
4

2 に答える 2

1

いいえ、WHERE 句でそのような式のエイリアスを参照することはできません。式のエイリアスは、それがインライン ビューまたは CTE (FROM 句で参照される) からのものである場合にのみ、WHERE 句で参照できます。

DISTINCT キーワードの使用は奇妙に見えます。SELECT リストの最初の式を括弧で囲む必要はありません。あなたの構造は、それが関数呼び出しのように見えます。(そうではありません。その DISTINCT キーワードは、SELECT リスト内のすべての式に適用されます)。

ここで JOIN 操作が必要な理由はまったく明確ではありません。

質問に質問で答えるのは嫌いですが... インライン ビューを使用して、TeamLead としてエイリアス化された cTL 列から値を取得することによって、何を得ようとしていますか? それはどのような問題を解決することになっていますか?テーブルを 2 回参照する必要があるのはなぜですか?

同じ質問を別の方法で尋ねるには...

このような tblEmpSchedule テーブルのクエリによって返される結果セットの何が「間違っている」のでしょうか?

SELECT DISTINCT s.cStoreCode             AS sc
     , s.cRetailerCode                   AS rc
     , s.cStoreCode + ' - ' + cStoreName AS Store
     , s.cTL                             AS TeamLead
  FROM tblEmpSchedule s
 WHERE s.cRepCode LIKE @repCode AND
       s.cClientCode LIKE @gCode AND
       s.cProjectCode LIKE @pCode AND
       s.cYear LIKE @year AND
       s.cCycleNo LIKE @cycleNo AND
       s.cRetailerCode LIKE @retailerCode AND
       s.cStoreCode <> ''
 ORDER BY s.cStoreCode

このクエリによって返される結果セットが必要なものと異なる理由を説明できる場合は、私 (または他の誰か) が助けることができるかもしれません。あなたの質問が立っているように、あなたが達成しようとしていることは明らかではありません。

注:cStoreCode IS NOT NULLクエリの " " 述語は冗長です。cStoreCode <> ''" " 述語が TRUE を返す場合、NULL にならないことは既にわかっています。

于 2012-07-13T20:57:07.323 に答える
1

SC/RC を一重引用符で囲む必要があるようです。

cStoreCode = 'SC' AND
cRetailerCode = 'RC'

編集:

動作するかどうかを確認するには、次のことを確認してください。

SELECT cTL as TeamLead 
FROM tblEmpSchedule t1
INNER JOIN 
(
  SELECT DISTINCT(cStoreCode) SC
    , cRetailerCode RC
    , cStoreCode + ' - ' + cStoreName AS Store
  FROM tblEmpSchedule
)t2

  on t1.cTL = t2.cTL
WHERE t1.cRepCode LIKE @repCode 
  AND t1.cClientCode LIKE @gCode 
  AND t1.cProjectCode LIKE @pCode 
  AND t1.cYear LIKE @year 
  AND t1.cCycleNo LIKE @cycleNo 
  AND t1.cRetailerCode LIKE @retailerCode 
  AND (t1.cStoreCode <> '' AND t1.cStoreCode is Not Null)
  AND t1.cStoreCode = t2.SC
  AND t1.cRetailerCode = t2.RC
ORDER BY  t1.cStoreCode
于 2012-07-13T17:34:38.097 に答える