2016-08-02 10 views
0

私はこのクエリに悩まされています。私はテーブル "prospectousuario"に参加するときに一致がない場合は "sin asignar"と言う必要がある "エグゼクティブ"と呼ばれるフィールドを表示したい場合は、それが存在する場合は、エグゼクティブの姓と名を言う必要があります。サブクエリが1つ以上の値を返しました。クエリが失敗しました。

select p.IDCANCAP, 
p.CEDULA, 
p.NOMBRES, 
p.APELLIDOS, 
p.CELULAR, 
p.CASA, 
p.CORREO, 
p.ESTABLECIMIENTO, 
c.DESCRIPCION, 
(select case when 
p.CEDULA = pu.IDPROSPECTO and pu.IDUSUARIO = u.CEDULA 
then u.NOMBRES+' '+u.APELLIDOS else 'Sin asignar' 
end from usuario as u, PROSPECTOUSUARIO as pu) as Ejecutivo, 
p.FECHA_CREAC 

from PROSPECTO p, CANALCAPTACION c 
where p.IDCANCAP = c.IDCANAL 
+0

エラーメッセージは**問題の内容を**正確に**示しており、ステートメントには1つのサブクエリしかありません。 *サブクエリが複数の行を返す*の部分は明確ではありませんか? –

+0

サブクエリが複数のレコードを返すことがあります。サブクエリを制限して1つのレコードしか返さないようにする方法はありますか? –

+0

@TimBiegeleisenテーブル 'prospectos'のすべてのレコードと割り当てられているエグゼクティブの名前を言う必要がある余分なフィールドを返さなければなりません。 – Jorge

答えて

0

ボーイが、これはあなたのSQLと行の間に読んだの多くに基づいて、推測です...しかし、それ与える:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an exp

クエリは次のとおりです。しかし、それは次のエラーを返します。 、エラーメッセージが言うのと同じように

select p.IDCANCAP, p.CEDULA, p.NOMBRES, 
    p.APELLIDOS, p.CELULAR,p.CASA, p.CORREO, 
    p.ESTABLECIMIENTO, c.DESCRIPCION, p.FECHA_CREAC, 
    case when exists 
     (Select * from PROSPECTOUSUARIO 
     Where IDPROSPECTO = p.CEDULA) 
     then u.NOMBRES+' '+ u.APELLIDOS 
     else 'Sin asignar' end Ejecutivo 
from PROSPECTO p 
    join CANALCAPTACION c on c.IDCANAL = p.IDCANCAP 
    join usuario u on u.CEDULA = p.CEDULA 
0

あなたの唯一

(select case when 
p.CEDULA = pu.IDPROSPECTO and pu.IDUSUARIO = u.CEDULA 
then u.NOMBRES+' '+u.APELLIDOS else 'Sin asignar' 
end from usuario as u, PROSPECTOUSUARIO as pu) 
を副問合せ:試します

は1行以上を返します。SELECT内の式として使用すると許可されません。実際、uテーブルとpuテーブルは、意味のある方法で他のテーブルと結合されていないようです。

修正するには、にテーブルを参加させる必要があります。実際には、あなたは何をしようとしているのかについてのサブクエリは必要ありません。すべてのテーブルをFROMセクションに移動し、内側か外側かに適切に結合します。残念ながら、私はどのフィールドに参加すべきかわからないので、私は情報や野生の推測がなければそこでは手伝っていけません。

関連する問題