0
votes

Comment ajouter les dernières valeurs sinon 0

Y a-t-il un meilleur moyen d'ajouter les 3 dernières valeurs d'une rangée où la valeur n'est pas 0 (i.e, ignorer la colonne lorsque la valeur = 0)? Exemple: xxx

à la recherche de valeurs de ligne; 20, 15, 12, 20.

En ce moment, je pense seulement à une déclaration de cas massive ...


3 commentaires

Somme Ne fonctionnera de toute façon pas ici, Somme fonctionne à travers les lignes et non des colonnes. Qu'est-ce qui détermine une colonne est la "dernière" colonne? Cela ressemble à une faille de conception si vous ajoutez une nouvelle colonne à chaque fois pour une "dernière" valeur.


Y a-t-il au moins une colonne id ou quelque chose? Est-ce que celles-ci vont jusqu'à déc ? Raëlly, vous devriez aussi normaliser vos données.


DERNIER COMME EN; [MAI] + [APR] + [MAR] Toutefois, si l'une de ces colonnes est 0, passez à autre chose pour trouver les 3 premières colonnes avec des valeurs positives. Il y a une pièce d'identité unique par ligne.


4 Réponses :


1
votes

Vous pouvez le faire en impouvert les colonnes les commander, puis en résumant comme ceci: xxx

Exemple sur dbfiddle.uk

Cependant, alors que d'autres signalent que nous voudrions faire cela, je soupçonne que votre modèle de données a des problèmes et vous «D Soyez meilleur avec ces valeurs dans les colonnes pour commencer.


0 commentaires

1
votes

en supposant il y a une colonne d'identité et supposant les colonnes montent sur déc .

Vous devez pivoter vos données et normaliser ça. Ensuite, vous pouvez facilement l'agrégez. C'est ainsi que vous le feriez "à la volée": xxx

idéalement, cependant, vous devez corriger votre modèle de données.


1 commentaires

Merci - Le modèle de données est intégré à Excel. Je pensais qu'une importation rapide et peu de requêtes SQL seraient plus rapides pour arriver à la réponse.



1
votes

Vous pouvez convertir des colonnes en lignes en utilisant cross appliquer et agrégat: xxx


0 commentaires

0
votes

Essayez ceci:

DECLARE @DataSource TABLE
(
    [RowID] INT IDENTITY(1,1)
   ,[Jan] INT
   ,[Feb] INT
   ,[Mar] INT
   ,[Apr] INT
   ,[May] INT
);

INSERT INTO @DataSource ([Jan], [Feb], [Mar], [Apr], [May])
VALUES (2, 3, 10, 0, 7)
      ,(2, 3, 10, 0, 0)
      ,(2, 3, 0, 0, 7)
      ,(2, 3, 10, 0, 7);

WITH DataSource AS
(
    SELECT [RowID]
          ,ROW_NUMBER() OVER (PARTITION BY [RowID] ORDER BY CASE [column]
                                                                    WHEN 'Jan' THEN 1
                                                                    WHEN 'Feb' THEN 2
                                                                    WHEN 'Mar' THEN 3
                                                                    WHEN 'Apr' THEN 4
                                                                    WHEN 'May' THEN 5
                                                               END DESC
           ) AS [MonthID]
          ,[value]
    FROM @DataSource
    UNPIVOT
    (
        [value] FOR [column] IN ([Jan], [Feb], [Mar], [Apr], [May])
    ) UNPVT
    WHERE [value] <> 0
)
SELECT [RowID]
      ,SUM([value])
FROM DataSource
WHERE [MonthID] <= 3
GROUP BY [RowID];
  • impulter les données li>
  • Commandez les mois des derniers au plus récent à l'exclusion des mois sans valeurs Li>
  • Somme les valeurs mais pour les 3 derniers mois seulement li> ul> p>


0 commentaires