Aufteilen einer einzelnen Zeile in mehrere basierend auf der Spalte

Arun Palanisamy

Ich habe eine bestimmte Anzahl von Zeilen wie folgt:

| Material No   | Quantity | Weight | Unit |
--------------------------------------------
| 111-22283/4   |    2     |   53   |  kg  |
| 123-ABC45/7   |    5     |   41   |   g  |
| 133-67879/80  |    7     |   31   |   g  |
| 144-54628     |    1     |   14   |  kg  |

Jetzt möchte ich eine Ausgabe wie folgt erzeugen:

| Material No   | Quantity | Weight | Unit |
--------------------------------------------
| 111-22283     |    2     |   53   |  kg  |
| 111-22284     |    2     |   53   |  kg  |
| 123-ABC45     |    5     |   41   |   g  |
| 123-ABC46     |    5     |   41   |   g  |
| 123-ABC47     |    5     |   41   |   g  |
| 133-67879     |    7     |   31   |   g  |
| 133-67880     |    7     |   31   |   g  |
| 144-54628     |    1     |   14   |  kg  |

Logik : Basierend auf dem Material muss ich die Zeilen nicht aufteilen. Wenn '/' am Ende des Materials nein ist, muss es gesplittet werden. Dann müssen wir die Differenz s/w letzte Zahl in der Materialnummer und der Zahl / finden. Wenn ja, dann möchte2 ich 2 verschiedene Zeilen mit jeder Nummer als Materialnummer ( bedeutet, wenn die letzte Ziffer 83/4 ist, dann möchte ich, dass die Materialnummer mit 83 und 84 endet ). Der schwierige Teil ist, wenn wir 89/90 haben. Es enthält 2 Zahlen nach / ( nur für 10er, 20er usw. ). Alle anderen Spalten bleiben für jede Material-Nr. gleich.

Um dies zu erreichen, haben wir derzeit eine sehr große Prozedur, die etwa 50-80 Zeilen Code enthält (finden Sie die Zeile mit '/' und entfernen Sie sie separat, dann suchen Sie den Index von / und so weiter). Ich würde gerne wissen, ob dies mit einer einfachen Abfrage oder einem sehr kurzen Verfahren möglich ist.

Eichhörnchen

Der schwierige Teil ist wahrscheinlich das Aufteilen material noder startingund die endingZahl.

Danach ist es nur eine einfache rekursive Abfrage, um die Nummer zu erhöhen und wieder zu verketten, um die Materialnummer zu bilden.

;with rcte as
(
    select  MaterialNo,
            base, st, en, n = st,
            material    = convert(varchar(20), base + isnull(convert(varchar(10), st), ''))
    from    material m
            -- get the position of the `/`
            cross apply
            (
                select  split = charindex('/', MaterialNo)          
            ) s     
            -- extract the ending number and convert to integer
            cross apply
            (
                select  en  = case  when    split > 0
                                    then    convert(int, right(MaterialNo, len(MaterialNo) -  split))
                                    end     
            ) en
            -- extract the starting number and convert to integer
            cross apply
            (
                select  st  = case  when    split > 0
                        then    convert(int, substring(MaterialNo, split - len(en), len(en)))
                        end
            ) st
            -- extract the base material no for concatenate
            cross apply
            (
                select  base    = case  when    split   > 0
                                        then    left(MaterialNo, split - len(en) - 1)
                                        else    MaterialNo
                                        end
            ) b

    union all

    select  MaterialNo, base, st, en, 
            n = n + 1,
            material = convert(varchar(20), base + convert(varchar(10), n + 1))
    from    rcte 
    where   n < en
)
select  *
from    rcte
order by MaterialNo, material

all dies basiert auf der Annahme, dass die Endung von Material Nr. rein numerisch ist.

Hinweis: Wenn Sie eine Tally-Tabelle haben, können Sie diese verwenden, um das rekursive cte . zu ersetzen

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Drucken der Zeile basierend auf der Datenstempelbedingung einer anderen Spalte

SQL Zwei Spalten aus einer einzelnen Zeile basierend auf der dritten Spalte

Bedingte Formatierung - Farbskalierung der gesamten Zeile basierend auf einer Spalte

Wiederholen Sie die Zeile basierend auf der Nummer in einer Spalte

Python - Aufteilen einer Zelle in einer Spalte in eine neue Zeile basierend auf einem Delmimeter

Aufteilen einer Spalte in mehrere Spalten basierend auf einem Markierungszeichen

Aufteilen einer Spalte in mehrere Spalten basierend auf ähnlichen Werten

Aufteilen einer Spalte in mehrere Spalten basierend auf zwei Bedingungen

Aufteilen des Pandas-Datenrahmens in mehrere Datenrahmen basierend auf der Bedingung in der Spalte

Aufteilen der datierbaren Zeile in mehrere Zeilen basierend auf der Zeichenaufteilung in .net

Aufteilen des Textes einer einzelnen Zeile in mehrere Zeilen derselben Spalte in einer CSV-Datei mit Python

Aufteilen in mehrere Spalten basierend auf der Bedingung

Teilen der Wörter in einer Zeile in mehrere Zeilen basierend auf einem bestimmten Wert einer anderen Spalte Python

TSQL: Aufteilen einer Zeile in mehrere Zeilen basierend auf der Nummer in einer Zelle

Teilmenge einer Zeile basierend auf der Spalte mit ähnlichem Namen

Farbcodierung (bedingte Formatierung) der gesamten Zeile basierend auf dem Wert einer einzelnen Spalte in der Google-Tabelle

MySQL-Abfrage zum Aufteilen einer Spalte in mehrere separate Spalten basierend auf der ID

Wie kann man Daten aus einer einzelnen Spalte basierend auf dem Trennzeichen in der Datenstufe aufteilen?

Berechnete Spalte für mehrere Zeilen basierend auf einer einzelnen Zeile

Aufteilen einer einzelnen Zeile in mehrere Spalten basierend auf dem Spaltenwert

SAS – Aufteilen einer einzelnen Spalte in zwei basierend auf dem Wert einer ID-Spalte

Erweitern einer einzelnen Zeile in mehrere Zeilen basierend auf Filtern

Wie kann man Spaltennamen basierend auf einer Spalte in eine Zeile eines neuen Datenrahmens aufteilen?

Konvertieren einer einzelnen Spalte in mehrere Spalten basierend auf eindeutigen Werten

Pandas - Aufteilen von Daten aus einer einzelnen Zeile in mehrere Zeilen

Aufteilen einer Zeile basierend auf mehreren Spaltenwerten

Spalte in mehrere Spalten aufteilen, basierend auf dem Inhalt der Spalte in Pandas

Wie kann ich basierend auf einer Formel mehrere Zeilen aus einer einzelnen Zeile erstellen?

Aufteilen einer einzelnen Spalte in mehrere Spalten in R

TOP Liste

  1. 1

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

  2. 2

    Wie füge ich mehrere Spalten in einer Spalte mit derselben Tabelle in SQL Server zusammen?

  3. 3

    Wie kann man Gitterquadrate dazu bringen, die Farbe zu ändern?

  4. 4

    Ich kann nicht verstehen, wie man Go-Code in mehreren Dateien kompiliert

  5. 5

    Zählen Sie die Vorkommen jedes Werts in einem Tupel in Python

  6. 6

    Gibt es eine sauberere Möglichkeit, Konstruktorargumente und Instanzeigenschaften einer Klasse in Typescript zu definieren?

  7. 7

    So implementieren Sie Pushwoosh mit ionic 2

  8. 8

    Wie wird der Wert im Dropdown-Menü basierend auf den ausgewählten Daten / IDs angezeigt?

  9. 9

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  10. 10

    Ändern Sie den Knotenpfad in das aktuelle Verzeichnis

  11. 11

    So erstellen Sie ein Array von Objekten aus zwei Arrays von Objekten mit einem gemeinsamen Schlüssel - JavaScript

  12. 12

    Rufen Sie die ID aus der Datagrid-Ansicht ab und zeigen Sie die Daten in Textfeldern einem anderen Formular an

  13. 13

    base js: Wie füge ich einem Objekt eine Eigenschaft auf die 'alte' Weise hinzu?

  14. 14

    Ersetze einen Teil einer Zeichenfolge durch eine Pandas-Spalte als Muster

  15. 15

    Blättern Sie auf Radio Click zur Abschnitts-ID

  16. 16

    CBCentralManager wird nach dem Verbinden neu gestartet

  17. 17

    Scherz, wie man eine Funktion verspottet, die von einer verspotteten Funktion zurückgegeben wird

  18. 18

    django-allauth Empfängersignal zum Hinzufügen einer Gruppenberechtigung zum Benutzer bei der Anmeldung

  19. 19

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  20. 20

    AQL: Teilweise Übereinstimmung in einer Reihe von Zeichenfolgen

  21. 21

    So summieren Sie die Werte zweier Tabellen und gruppieren sie nach Datum

heißlabel

Archiv