2010-11-15 7 views
1

J'ai un rapport SSRS et j'essaie de résumer les lignes de façon conditionnelle. J'ai:Regroupement et sommation d'éléments dans une table à l'aide de SSRS

11/15/2010 12:14:43 AM | Taux actuel | Vitesse actuelle | Montant utilisé dans cette minute (vitesse * Taux/60) etc etc etc

Je suis en train d'ajouter toutes les lignes qui ont eu lieu dans une heure, afin que mon rapport indique:

11/15/2010 | 12 heures - 1 heure | Quantité utilisée pour cette heure (disons, 7 gallons)

Je ne trouve nulle part comment résumer une rangée par heure de façon conditionnelle, ou comment obtenir mon rapport pour dire ce qui précède.

Merci d'avance!

+0

Vous essayez de le faire dans le rapport, par rapport à l'instruction SQL? –

+0

Oui, dans le rapport. J'espérais utiliser la fonctionnalité Expression pour le faire. – Sarah

+0

Je suis d'accord avec OMG Ponies, ce serait plus simple à faire en SQL et ensuite présenter le résultat au rapport (probablement plus rapide aussi). Vous dites que vous étiez "... en espérant utiliser la fonction Expression ..." pouvez-vous expliquer pourquoi vous préférez cette méthode? – Tony

Répondre

0

dans le tableau suivant pour les tests:

CREATE TABLE `log` (
    `entry_date` datetime DEFAULT NULL, 
    `amount_used` int(11) DEFAULT NULL 
) 

avec des données de test:

entry_date   amount_used 
2010-11-01 10:00:00, 3 
2010-11-01 10:30:00, 1 
2010-11-01 11:00:00, 6 

Utilisez cette requête pour obtenir la date, la plage horaire et le montant total utilisé:

SELECT DATE(entry_date) AS entry_date, 
    CONCAT_WS('-',CONVERT(MIN(HOUR(entry_date)), char(2)), CONVERT(MAX(HOUR(entry_date)),CHAR(2))) hours, 
    SUM(amount_used) amount_used 
FROM (
    SELECT entry_date, SUM(amount_used) AS amount_used 
    FROM log 
    GROUP BY DATE(entry_date), HOUR(entry_date) 
    ) T; 

Toutes les choses de CONCAT/CONVERT sont juste pour obtenir la gamme d'heures dans ce jour particulier, comme un stri ng C'est le résultat:

entry_date hours amount_used 
2010-11-01, 10-11, 10 
+0

Merci beaucoup Tony, ce fut une aide précieuse pour moi! – Sarah

+0

J'ai créé un nouveau jeu de données et j'ai collé la requête, en changeant les noms en ceux de ma base de données. Cependant, lorsque j'essaie d'exécuter la requête, le 'DATE' n'est pas un nom de fonction intégré reconnu. Une idée de pourquoi cela pourrait être? – Sarah

+0

Utilisez-vous SQL Server? Je n'ai que MYSQL disponible pour le moment. Pour passer à T-SQL, remplacez la fonction HOUR par DATEPART (HOUR, entry_date). Pour obtenir seulement le DATE d'un DATETIME dans T-SQL vous devez faire un hack plutôt méchant en utilisant quelque chose comme ceci: CAST (FLOOR (CAST (GETDATE() COMME FLOAT)) DATETIME) – Tony