J'essaie de faire une requête avec une sous-requête dedans où je veux résumer sur le numéro d'identification. Mais cela me donne l'erreur: 'La sous-requête est revenue plus d'une valeur. Ceci n'est pas autorisé lorsque la sous-requête suit =,! =, ,> Ou lorsque la sous-requête est utilisée comme une expression. '
J'ai déjà essayé: P>
CREATE VIEW [dbo].[VW_Verblijfsobjecten_uitgeklapt]
AS
SELECT a.[Gemeentecode-AOB]
,a.[Code objecttypering-AOB]
,a.[Identificatie-AOB]
,a.[Gebruiksdoel]
,a.[Datum ontstaan-AOB]
,a.[Status code-AOB]
,a.[Buurtnaam]
,a.[Huisnummer]
,a.[Huisnummertoevoeging]
,a.[Postcode]
,a.[Identificatie-PND]
,a.[Geometrie]
,a.[Datum einde gebruik-AOB]
,a.[Einddatum-AOB]
,c.[DateValue]
,a.[Woonplaatsnaam]
,(SELECT COUNT(DISTINCT(b.[Identificatie-AOB]))
FROM [Clean.VBO] as b
WHERE b.[Datum ontstaan-AOB] <= c.[DateValue]
AND (b.[Gebruiksdoel] IN ('1', '111', '11141', '11161', '121', '131', '141', '151', '161', '181'))
AND (b.[Status code-AOB] <> 82)
AND (b.[Datum einde gebruik-AOB] = '2999-01-01' OR b.[Datum einde gebruik-AOB] > c.[DateValue])
GROUP BY b.[Woonplaatsnaam]) AS AantalWoningenInDeTijd
FROM [Clean.VBO] as a
INNER JOIN [Clean.Peilkalender] as c
ON a.[Datum ontstaan-AOB] <= c.[DateValue]
5 Réponses :
Supprimer le groupe à partir de la sous-requête Stracter
CREATE VIEW [dbo].[VW_Verblijfsobjecten_uitgeklapt]
AS
SELECT a.[Gemeentecode-AOB]
,a.[Code objecttypering-AOB]
,a.[Identificatie-AOB]
,a.[Gebruiksdoel]
,a.[Datum ontstaan-AOB]
,a.[Status code-AOB]
,a.[Buurtnaam]
,a.[Huisnummer]
,a.[Huisnummertoevoeging]
,a.[Postcode]
,a.[Identificatie-PND]
,a.[Geometrie]
,a.[Datum einde gebruik-AOB]
,a.[Einddatum-AOB]
,c.[DateValue]
,a.[Woonplaatsnaam]
,(SELECT COUNT(DISTINCT(b.[Identificatie-AOB]))
FROM [Clean.VBO] as b
WHERE b.[Datum ontstaan-AOB] <= c.[DateValue]
AND (b.[Gebruiksdoel] IN ('1', '111', '11141', '11161', '121', '131', '141', '151', '161', '181'))
AND (b.[Status code-AOB] <> 82)
AND (b.[Datum einde gebruik-AOB] = '2999-01-01' OR b.[Datum einde gebruik-AOB] > c.[DateValue])
)
AS AantalWoningenInDeTijd
FROM [Clean.VBO] as a
INNER JOIN [Clean.Peilkalender] as c
ON a.[Datum ontstaan-AOB] <= c.[DateValue]
Votre sous-requête est regroupée par b. [Woon ... IncrediblylongnameinalUnguSetHatnobodyStands]
Cela permettra (éventuellement) de multiples résultats en fonction de la colonne que vous regroupez par. Ceci n'est pas autorisé dans une sous-requête dans la sélection ou la partie de votre relevé SQL. P>
Ce que vous pouvez faire pour récupérer votre résultat souhaité est de placer la sous-requête de la partie de votre requête. Attribuez une poignée et effectuez une jointure appropriée dans les critères que vous voyez en forme. La valeur jointe résultante peut ensuite être utilisée dans votre partie de sélection de la requête. P>
SELECT a.x, b.y, c.z
FROM A a
INNER JOIN B b
INNER JOIN (<subselect>) c
ON a.a = c.a
WHERE ...
La langue que personne ne comprend est le néerlandais :-)
@ROBERTKock: Ce n'était pas le point que j'ai essayé d'apporter, mais merci.;)
Je connais. Je plaisante'
Je ne suis pas vraiment sûr d'avoir compris ce que vous voulez, mais je suppose que vous pouvez obtenir ce dont vous avez besoin en changeant un peu la sous-requête:
(SELECT COUNT(DISTINCT(b.[Identificatie-AOB]))
FROM [Clean.VBO] as b
WHERE b.[Datum ontstaan-AOB] <= c.[DateValue]
AND (b.[Gebruiksdoel] IN ('1', '111', '11141', '11161', '121', '131', '141', '151', '161', '181'))
AND (b.[Status code-AOB] <> 82)
AND (b.[Datum einde gebruik-AOB] = '2999-01-01' OR b.[Datum einde gebruik-AOB] > c.[DateValue])
AND (b.[Woonplaatsnaam] = a.[Woonplaatsnaam]) AS AantalWoningenInDeTijd -- Extend the condition instead of grouping by
)
C'était exactement la solution que je cherchais! Merci
Je pense que votre sous-requête doit être jointe à la table d'origine comme suit:
(SELECT COUNT(DISTINCT(b.[Identificatie-AOB]))
FROM [Clean.VBO] as b
WHERE a.[Woonplaatsnaam] = b.[Woonplaatsnaam] //added this line
AND [Datum ontstaan-AOB] <= c.[DateValue]
AND (b.[Gebruiksdoel] IN ('1', '111', '11141', '11161', '121', '131', '141', '151',
'161', '181'))
AND (b.[Status code-AOB] <> 82)
AND (b.[Datum einde gebruik-AOB] = '2999-01-01' OR b.[Datum einde gebruik-AOB] > c. [DateValue])
GROUP BY b.[Woonplaatsnaam]) AS AantalWoningenInDeTijd
Le message d'erreur est très descriptif:
Subquery a renvoyé plus d'une valeur. Ceci n'est pas autorisé quand le la sous-requête suit =,! =, ,> ou lorsque la sous-requête est utilisée comme une expression. p> BlockQuote>
Supposons que vous souhaitiez utiliser un opérateur de comparaison qui attend une valeur unique. Exemple: P>
yourcolumn in (select yourcolumn2 from yourtable where yourcondition)
Vous faites un groupe par ainsi que pour chaque valeur de WoodPlaatsnamm, vous obtiendrez un compte, donc plusieurs rangées
Ce n'est pas clair. Utilisez suffisamment de mots, de phrases et de références à des éléments d'exemples pour dire clairement et parfaitement ce que vous voulez dire. Lorsque vous décrivez un résultat: dites suffisamment pour que quelqu'un puisse partir et revenir avec une solution. S'il vous plaît dans les questions de code donnez un Exemple de reproductible minimal - CODE et CODE PASTE & CLETNABLABLIMABLE PLUS PROPOSITION PLUS SPÉCIFICATION ELECTÉE ET explication. Minimal signifie ajouter un code de problème minimal au code de travail minimal. Ainsi, donnez un code minimal que vous montrez fait ce que vous attendez et un code minimal avec le premier endroit où vous allez mal. (Débogage fondamental.)
PS Qu'avez-vous appris Googling ce message d'erreur? Ceci est une FAQ. Avant d'envisager de poster, veuillez toujours google votre message d'erreur ou de nombreuses phrases claires, concises et précises de votre question / problème / but, avec et sans vos chaînes / noms particuliers, et lire de nombreuses réponses. Si vous postez une question, utilisez une phrase comme titre. Comment demander PS d'abord, vous devez poster une question à un message d'erreur, car vous êtes confus la langue ou vous avoir une typographie / glissement. Si vous avez toujours un problème avec la rédaction d'un programme approprié post une autre question.
Dupliquer possible de SQL Server Subquery a renvoyé plus d'une valeur. Ceci n'est pas autorisé lorsque la sous-requête suit =,! =, <, <=,>,> =