Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SubQuery Filter als Berechnungsgrundlage aber wie ?

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von paulowitz009, 13 Januar 2020.

  1. paulowitz009

    paulowitz009 Neuer Benutzer

    Liebes SQL Team,

    ich versuche prozentuale Verteilung von Materialnummern zu berechnen aber als Basis (100) für die Berechnung sollen nur die als Valide gekennzeichneten Materialen genommen werden.

    Beispiel, siehe unten in der Tabelle
    Materialnummer 1, 10, 100, 1000, 10000 gehören der gleichen Material-ID aber Valide sind nur die mit dem Eintrag '1999').

    Normalerweise würde ich die Anzahl Materialnummern zusammenzählen (sind 100) und dann
    100 / 2 für Mateiralnummer 1 = 20 % (da 2 Stück), für Materialnummer 10 = 30 % usw.

    Ich möchte aber nur die validen als Grundlage für 100 nehmen (die gelben)

    upload_2020-1-13_14-46-33.png

    select "materialnummer", "id", "anzahl, anzahl / (select sum("anzahl") from TABELLE) as Prozent
    where "valide" Like '1%'

    Die Ausgabe wird ohne die nicht-validen durchgeführt aber die Ausgabe ergibt für Material 1 = 20 % und 10 = 30% und 1000 = 10 %.
    Damit hätte ich 60 % als Verteilung und 40 % fehlen...
     

    Anhänge:

  2. akretschmer

    akretschmer Datenbank-Guru

    Du hast 2 Selects, mit unterschiedlichen WHERE-Conditions ...
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from paulowitz009 ;
      mat  | id | anzahl | valide
    -------+----+--------+--------
         1 | a  |      2 |   1999
        10 | a  |      3 |   1999
       100 | a  |      2 |   2999
      1000 | a  |      1 |   1999
     10000 | a  |      2 |   2999
    (5 rows)
    
    test=*# select mat, id, anzahl, anzahl::numeric / (select sum(anzahl) from paulowitz009) prozent from paulowitz009 where valide = 1999;
     mat  | id | anzahl |        prozent         
    ------+----+--------+------------------------
        1 | a  |      2 | 0.20000000000000000000
       10 | a  |      3 | 0.30000000000000000000
     1000 | a  |      1 | 0.10000000000000000000
    (3 rows)
    
    test=*# select mat, id, anzahl, anzahl::numeric / (select sum(anzahl) from paulowitz009 where valide = 1999) prozent from paulowitz009 where valide = 1999;
     mat  | id | anzahl |        prozent         
    ------+----+--------+------------------------
        1 | a  |      2 | 0.33333333333333333333
       10 | a  |      3 | 0.50000000000000000000
     1000 | a  |      1 | 0.16666666666666666667
    (3 rows)
    
    test=*#
    
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden