2017-03-02 13 views
0

を使用する場合、私は次のクエリを実行すると=、=、<, <= , >、> =:!はこれが許可されていない私は、サブクエリ

サブクエリ:

SELECT 
    CASE 
     WHEN AT_EMPSCHEDULE.START1 <> '01/01/1900' 
      AND AT_EMPSCHEDULE.START2 <> '01/01/1900' 
      AND AT_EMPSCHEDULE.END2 <> '01/01/1900' 
      AND AT_EMPSCHEDULE.LEAVECODE ='' 
      AND NOT EXISTS(SELECT PDATE 
          FROM HR_PUBHOLIDAY 
          WHERE PDATE=AT_EMPSCHEDULE.TRANDATE) 
      AND DATEPART(WEEKDAY,AT_EMPSCHEDULE.TRANDATE) <> 1 
      THEN 
      CAST((SELECT HIS_GENSALARYD.BASESALARY/HIS_GENSALARYD.WORKDAY 
        FROM HIS_GENSALARYD 
        WHERE (AT_EMPSCHEDULE.TRANDATE BETWEEN HIS_GENSALARYD.PAYFROM 
                AND HIS_GENSALARYD.PAYTO 
        AND HIS_GENSALARYD.EMPCODE = AT_EMPSCHEDULE.EMPCODE)) AS DECIMAL(10, 2)) 
      ELSE 0 
    END AS DAILYSALARY 
FROM 
    HIS_GENSALARY 
INNER JOIN 
    AT_EMPSCHEDULE ON HIS_GENSALARY.EMPCODE = AT_EMPSCHEDULE.EMPCODE 
        AND MONTH(TRANDATE) = HIS_GENSALARY.INMONTH 
        AND YEAR(TRANDATE) = HIS_GENSALARY.INYEAR 
WHERE 
    HIS_GENSALARY.EMPCODE = HIS_GENSALARY.EMPCODE 

を私はメッセージが表示されます1つ以上の値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

+2

です。サブクエリは使用されるコンテキストでは、多くとも1つの行を戻すことができます。 SQL Serverはスカラー値を期待しています。単一の値。結果セットではなく、観察された動作が期待され、文書化された動作と一致します。 *質問*がありましたか?たとえば、AVGなどの集計関数を使用して、単一の値を返すことができますか?私たちはただ推測しているだけです。 – spencer7593

答えて

0

問題はここにある:あなたが表現として使用している

(SELECT HIS_GENSALARYD.BASESALARY/HIS_GENSALARYD.WORKDAY 
FROM HIS_GENSALARYD 
WHERE AT_EMPSCHEDULE.TRANDATE BETWEEN HIS_GENSALARYD.PAYFROM 
    AND HIS_GENSALARYD.PAYTO 
AND HIS_GENSALARYD.EMPCODE = AT_EMPSCHEDULE.EMPCODE) 

。エラーメッセージごとに、の結果が得られます。つまり、複数の行を返す必要はありませんが、少なくとも1つの呼び出しが複数の行を返しています。

強制的に1行だけを返すようにするには、集計関数を適用します。明らかな選択は、max()

(SELECT MAX(HIS_GENSALARYD.BASESALARY/HIS_GENSALARYD.WORKDAY) 
FROM HIS_GENSALARYD 
WHERE AT_EMPSCHEDULE.TRANDATE BETWEEN HIS_GENSALARYD.PAYFROM 
    AND HIS_GENSALARYD.PAYTO 
AND HIS_GENSALARYD.EMPCODE = AT_EMPSCHEDULE.EMPCODE) 
関連する問題