2017-01-19 3 views
-1

を返された私のSQLです:エラー512:サブクエリは複数の値

SELECT DB1.IdUtente 
     ,DB2.Gruppo 
     ,DB1.Username 
     ,DB1.Psw 

     ,CASE WHEN DB1.RagioneSociale IS NOT NULL 
        AND DB1.RagioneSociale <> '' 
      THEN DB1.RagioneSociale 
      ELSE DB1.Cognome + ' ' + DB1.Nome 
      END AS Nominativo 

     ,DB1.Indirizzo + ' - ' + DB1.Cap+ ' ' + DB1.Citta + '(' + DB1.Provincia + ')' AS IndirizzoCompleto 
     ,DB1.Telefono + ' ' + DB1.Email AS Contatti 

     ,(SELECT DISTINCT COUNT (*) 
      FROM DB3 
      WHERE DB3.IdAttivazione = DB1.IdUtente 
      ) AS NumeroAccessi 

     ,(SELECT DB4.NumTarga 
      FROM DB4 
      WHERE DB4.IdUtente = DB1.IdUtente 
      ) AS NumeroTarghe 

     ,DB1.DataRegistrazione 
     ,DB1.DataScadenza 
     ,DB1.Attivo 
FROM DB1 
    INNER JOIN DB2 
     ON DB1.IdGruppo = DB2.IdGruppo 
WHERE DB1.Demo = 0 
ORDER BY DB1.RagioneSociale 

は、なぜ私はSQL Serverからこのエラーが発生しますか?

エラー512:サブクエリが1より大きい値を返しました。 =、!=、<、< =、>、> =、またはサブクエリが式として使用されている場合は、これは許可されません。

何が間違っていますか?

大変申し訳ございません。任意の助け

おかげ

種類よろしく

M.W.

+0

' SELECT DISTINCT COUNT(*) ' - >' distinct'キーワードを削除します。これは冗長です。エラーについては、2番目のサブクエリが1つ以上の値を返している必要があります。 –

+0

なぜ私はDB4からNumTarga ....という列を1つだけ取得したいのですか。 –

+1

1つの列が表示されますが、 –

答えて

1

あなたのコードは問題なく動作していた場合でも、あなたのサブ選択がjoinのように書き換える必要があります。

あなたがこれを行うと、実際にあなたの全体のデータセット全体にいくつかのテストを行う場合は、あなたの重複がどこから来ているあなたは、あなたに複数の行を与え、あなたが見ているエラーの原因となっている、表示されます。

SELECT DB1.IdUtente 
     ,DB2.Gruppo 
     ,DB1.Username 
     ,DB1.Psw 

     ,CASE WHEN DB1.RagioneSociale IS NOT NULL 
        AND DB1.RagioneSociale <> '' 
      THEN DB1.RagioneSociale 
      ELSE DB1.Cognome + ' ' + DB1.Nome 
      END AS Nominativo 

     ,DB1.Indirizzo + ' - ' + DB1.Cap+ ' ' + DB1.Citta + '(' + DB1.Provincia + ')' AS IndirizzoCompleto 
     ,DB1.Telefono + ' ' + DB1.Email AS Contatti 

     ,DB3.NumeroAccessi 

     -- Somewhere in your data you will have at least two rows with different values in this field. 
     ,DB4.NumTarga AS NumeroTarghe 

     ,DB1.DataRegistrazione 
     ,DB1.DataScadenza 
     ,DB1.Attivo 
FROM DB1 
    INNER JOIN DB2 
     ON DB1.IdGruppo = DB2.IdGruppo 
    INNER JOIN (SELECT IdAttivazione 
        ,COUNT(*) as NumeroAccessi 
       FROM DB3 
       GROUP BY IdAttivazione 
       ) DB3 
     ON DB3.IdAttivazione = DB1.IdUtente 
    INNER JOIN DB4 
     ON DB4.IdUtente = DB1.IdUtente 
WHERE DB1.Demo = 0 
ORDER BY DB1.RagioneSociale 
+0

ああ、ありがとう! –

関連する問題