Je crée des rapports pour une application devant être utilisée par différents états. La base de données a le potentiel d'être très grande. Je voudrais savoir quel est le meilleur moyen d'obtenir les totaux des colonnes.Méthode la plus optimisée pour obtenir des totaux de colonnes dans SQL Server 2005+
Actuellement, j'ai SQL similaire à ce qui suit:
SELECT count(case when prg.prefix_id = 1 then iss.id end) +
count(case when prg.prefix_id = 2 then iss.id end) as total,
count(case when prg.prefix_id = 1 then iss.id end) as c1,
count(case when prg.prefix_id = 2 then iss.id end) as c2
FROM dbo.TableName
WHERE ...
Comme vous pouvez le voir, les colonnes sont là deux fois. Dans un cas, je les ajoute et montre le total, dans l'autre je montre juste les valeurs individuelles qui sont requises pour le rapport.
Ceci est un très petit échantillon du SQL, il y a 20 + colonnes et w/i ces colonnes 4 ou plus d'entre eux sont sommés à la fois.
Je pensais à déclarer certains paramètres @ et la mise en chacune des colonnes égales à un @parameter, alors je pourrais simplement ajouter que jamais je devais paramètres @ montrer les totaux des colonnes, IE: SET @Total = @c1 + @c2
Mais , est-ce que le moteur SQL Server prend garde que les colonnes soient là plusieurs fois comme ça? Existe-t-il une meilleure façon de le faire?
Je ne peux pas utiliser la première option parce que l'instruction CASE à l'intérieur du COUNT est un peu plus compliqué que vous ne le voyez réellement. Je pense que je vais essayer une variante de ce que vous et l'autre posté suggéré. Plutôt qu'une vue en ligne, utilisez un CTE. Je ne sais pas si cela fera une différence. –
Quelle que soit la complexité de l'instruction case, je préférerais avoir des résultats en tant que colonne (s) d'ID, comptez. Une déclaration de cas plus compliquée aurait juste plus de colonnes d'identification. Transformez cette déclaration de compte en une sous-requête, puis sélectionnez dans la sous-requête si nécessaire, par exemple en joignant la sous-requête à elle-même pour présenter les résultats comme vous le souhaitez. Probablement juste mon préf ... sélectionner l'ID, la colonne (s) est préférentielle sur select column_where_id = 1, column_where_id = 2, column_where_id = etc ... – Twelfth