2011-04-26 1 views
2

Je table de vue qui ressemble à ceci:Comment puis-je créer une procédure stockée (temporaire?) Pour aider à faire une vue récapitulative?

enter image description here

Et j'ai commencé à créer une vue de résumer par le statut pour chaque devise:

WITH C AS (SELECT * FROM CampaignsPublisherReportSummary) 
SELECT 
    'Total' T, 
    SUM(CASE WHEN PayCurrency='USD' THEN Total END) USD, 
    SUM(CASE WHEN PayCurrency='EUR' THEN Total END) EUR, 
    SUM(CASE WHEN PayCurrency='GBP' THEN Total END) GBP, 
    SUM(CASE WHEN PayCurrency='AUD' THEN Total END) AUD 
FROM C 
UNION 
SELECT 
    'ToBePaid' T, 
    SUM(CASE WHEN PayCurrency='USD' THEN ToBePaid END) USD, 
    SUM(CASE WHEN PayCurrency='EUR' THEN ToBePaid END) EUR, 
    SUM(CASE WHEN PayCurrency='GBP' THEN ToBePaid END) GBP, 
    SUM(CASE WHEN PayCurrency='AUD' THEN ToBePaid END) AUD 
FROM C 
GO 

enter image description here

Je pourrais finir et obtenir ce que je veux en copiant/collant à nouveau pour chacun des autres statuts (Unverified, Verified, ... etc) mais le programmeur en moi veut avoir une sorte de fonction prend le nom du statut et exécute une version templative de la requête ...

QUESTION: Puis-je faire ceci? Ou y a-t-il un autre meilleur moyen de divulguer l'information qui me manque?

MISE À JOUR: Mon but est d'avoir quelque chose comme ceci:

SELECT * FROM #mytempfunc('Total') 
UNION SELECT * FROM #mytempfunc('ToBePaid') 
UNION ... 
+0

Je ne suis pas tout à fait certain sur ce que vous essayez de faire. Essayez-vous de générer dynamiquement les colonnes de devises? Si c'est le cas, vous pouvez faire un select paycurrency distinct de [current_table], faire un curseur/boucle et construire dynamiquement la requête qui résume le total/tobepaid montants. – mservidio

+0

merci pour les commentaires - peut-être que j'essaie de le rendre compliqué quand ce n'est pas le cas. de toute façon, j'ai mis à jour la question et mis quand je suis "envisioning" comme objectif ici ... –

+2

Si le résultat de cette requête est de créer un rapport, dans SSRS ou similaire, laissez l'outil de reporting gérer le regroupement et les totaux . – Tony

Répondre

2

Je ne suis pas tout à fait clair sur ce que vous demandez; vous auriez besoin de SQL dynamique pour sélectionner un champ par valeur de chaîne. Toutefois, si votre liste de mesures est statique (et il devrait être, en provenance d'un point de vue), vous pouvez obtenir ce dont vous avez besoin, ou tout au moins un peu plus, avec UNPIVOT:

SELECT PayCurrency, Metric, Amount 
FROM CampaignsPublisherReportSummary 
UNPIVOT (Amount FOR Metric IN (Paid, ToBePaid, Total)) AS X 
+0

mec, c'est juste exacltement - merci! –

+1

Content de vous aider! Notez que @Tony ci-dessus a probablement raison de laisser le pivotement et le formatage à votre couche de reporting, si possible. Pourtant, il est bon de savoir comment le gérer du côté de la base de données aussi. –

Questions connexes