2010-06-25 6 views
5

J'essaie d'écrire un Combien ai-je tapé? requête sur Stack* Data Explorer.Quel est le problème avec cette requête SQL Data Explorer?

Modification d'une requête existante m'a fait jusqu'ici:

-- How much did I type? 

DECLARE @UserId int = ##UserId## 

    select sum(len(Body)) AS 'Posts' from posts where owneruserid = @UserId, 
    select sum(len(Text)) AS 'Comments' from comments where userid = @UserId, 
    (select sum(len(Body)) from posts where owneruserid = @UserId + 
    select sum(len(Text)) from comments where userid = @UserId) AS 'Total' 

J'attends trois colonnes et une ligne, quelque chose comme ceci:

Posts Comments Total 
1234  5678  6912 

Mais il y a un problème de syntaxe, en raison de laquelle Je reçois:

Error: Incorrect syntax near ','. Incorrect syntax near ','. Incorrect syntax near the keyword 'select'. Incorrect syntax near ')'.

Quelle est la syntaxe correcte pour cela?

+0

La question concerne http://odata.stackexchange.com/stackoverflow/query/new spécifiquement. Les requêtes SQL aléatoires n'aident pas. –

+0

@ Aaron Harun: Qu'est-ce que tout le monde fait mal? Est-ce que Data Explorer ne supporte qu'un sous-ensemble de requêtes SQL valides? – Lazer

+0

Fondamentalement, oui. Ils doivent utiliser TSQL, mais certains ne le sont pas. (http://www.devguru.com/technologies/t-sql/home.asp) Dans la plupart des "mauvais" exemples, il y a des erreurs de syntaxe et d'autres ils ont utilisé des noms de champs différents. * hausser les épaules * Ça arrive. –

Répondre

3

Voici une requête de travail:

DECLARE @UserId int; 
set @UserID = 4; 

Select *, (Posts+Comments) as Total 
FROM 
    (select sum(len(Body)) AS Posts FROM posts where owneruserid = @UserId) p, 
    (select sum(len(Text)) AS Comments FROM comments where userid  = @UserId) c 
1

je le ferais de cette façon ...

declare @ownerId int 
set @ownerId = 1 

declare @Posts bigint 
declare @Comments bigint 

select 
@Posts = sum(len(Body)) 
from Posts where owneruserid = @ownerId 

select 
@Comments = sum(len(Text)) 
from Comments where userid = @ownerId 

select @Posts as 'Posts', @Comments as 'Comments', @Posts + @Comments as 'Total' 
+0

A l'origine, j'ai oublié d'effacer les instructions select avant les instructions "sum". Ca devrait être bon maintenant. – dhillis

+0

désolé, je suis fatigué et n'a pas remarqué les sous-sélection ... nouvelle version à venir ... – dhillis

+0

Testez la requête ici: http://odata.stackexchange.com/stackoverflow/query/new –

0
 
-- How much did I type? 

/* If this is to be a parameter from your app, you don't need to declare it here*/ 
DECLARE @UserId int; 
set @UserID = 4; 

Select *, (Posts+Comments) as Total 
FROM 
    (select sum(len(Body)) AS Posts FROM posts where owneruserid = @UserId) p, 
    (select sum(len(Text)) AS Comments FROM comments where userid  = @UserId) c 
+0

Vous avez eu un égal supplémentaire, à part ça, ça fonctionne. –

1

Salut votre problème est que vous avez 3 à 1 Déclarations concaténé Déclaration - juste faire une déclaration sur si: comme

select sum(len(Body)) AS 'Posts', sum(len(Text)) AS 'Comments' , sum(len(Body)) + sum(len(Text)) AS Total 
from posts t1 inner join comments t2 on t1.owneruserid = t2.userid 
where t1.owneruserid = @UserId 

Espérons que j'ai tapé correct ...

Questions connexes