2009-10-21 3 views
0

J'ai une requête SQL qui est quelque chose commeutilisation SQL GROUP BY telle qu'elle résulte dans l'original SELECT

SELECT SUM(price) FROM budget GROUP BY {{PLACEHOLDER}} 

où {{PLACEHOLDER}} sera remplacé dans le code. Est-il possible de le remplacer par quelque chose qui aboutira à la même sortie que la déclaration suivante?

SELECT price FROM budget 
+0

Je suis désolé, mais je n'ai aucune idée de ce que vous demandez –

+0

Pourquoi ne pas simplement supprimer le SUM()? –

+1

En fait il y a des fois où c'est une approche soignée - je l'ai vu utilisé assez régulièrement lors de la construction de requêtes dynamiques dans Access. – Cruachan

Répondre

5

Si vous avez une colonne unique, comme un identifiant autogenerated vous pouvez utiliser cette

SELECT SUM(price) FROM budget GROUP BY budget_id 

sera égal à

SELECT price FROM budget 

si chaque ligne a un autre budget_id (identité, les champs d'auto-incrustation correspondent à la facture)

Maintenant , Je vous exhorte à reconsidérer la sagesse de faire un tel hack, pourquoi ne pas mettre un si cela importe?

+0

ROW_ID() sur SQL Server? Si vous voulez dire ROW_NUMBER(), vous ne pourrez pas agréger dessus sans une CTE ou une table dérivée. Cependant, vous avez raison sur le regroupement sur la colonne clé – gbn

+0

Merci gbn, a été confondu par la réponse de Tzury –

0

Ma recommandation est d'inclure GROUP BY directement dans votre espace réservé si et seulement si un espace réservé existe:

if (!empty($placeholder)) { 
    $placeholder = 'GROUP BY ' . $placeholder; 
} 
0

Si je vous ai bien compris, vous souhaitez omettre le groupe en vigueur. Dans ce cas, le rendre GROUP BY ROW_ID Cela donnera les mêmes résultats

+0

Vous supposez que l'affiche utilise SQL Server, pas une telle garantie dans la question (jusqu'à présent.) –

+0

@Vinko: ROW_ID() n'est pas dans SQL Server ... – gbn

+0

Eh bien, il suppose toujours une version de rdbms. Mon erreur cependant. (Et Tzury) –

1
...GROUP BY NEWID() 

aléatoire par ligne, agrège donc jamais. Et séparé de la colonne clé (s), schéma etc

+0

Que faire si vous êtes malchanceux (et obtenez le même identifiant deux fois)? Ou est-ce garanti de retourner différemment pour chaque ligne sur une seule requête? C'est aussi un RDMB spécifique –

+0

C'est un GUID: les chances de collision sont astronomiques. – gbn

+0

Génial. Toujours spécifique RDBMS je voulais dire là-haut. –