-
SQL Auswertung 5 Felder im Datensatz ...suche nach identischem Inhalt
Hallo zusammen,
ich habe in einem Kundenstamm 5 Felder, je 3A, in denen ein 3-stelliger Schlüssel steht, dieser
representiert den zuständigen Sachbearbeiter für den jeweiligen Kunden.
Nach einer Neuorganisation der Schlüssel habe ich jetzt bei einigen Kunden Schlüssel mehrfach in den 5 Feldern.
Kennt jemand eine galante SQL Lösung für die Ermittlung solcher Kunden ????
Ich kann natürlich alle 5 Felder gegeneinander auf gleichen Inhalt prüfen, viel Code ...
Vielleicht gibt es ja eine bessere Lösung.
Vielen Dank im Voraus.
Peet
-
Im Prinzip "unpivot":
select * from (
select Kunde, SB1 as SB, 'SB1' as Feld from Tabelle
union
select Kunde, SB2, 'SB2' as Feld from Tabelle
:
) k
where SB ...
-
Zitat von Fuerchau
Im Prinzip "unpivot":
select * from (
select Kunde, SB1 as SB, 'SB1' as Feld from Tabelle
union
select Kunde, SB2, 'SB2' as Feld from Tabelle
:
) k
where SB ...
Danke, das ist natürlich eine Idee...ich baue das mal zusammen.
Vg.
-
Hier eine Variante die die Duplikate entfernt und die Daten wieder in der originalform bereitstellt:
Code:
with
kunden(kdnr, knz1, knz2, knz3, knz4, knz5) as (
values
(1, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE'),
(2, 'AAA', 'BBB', 'BBB', 'CCC', 'DDD')
),
unpivot as (
select distinct
kdnr, knz, dense_rank() over(partition by kdnr order by knz) as knznr
from
kunden
cross join lateral(
values (knz1), (knz2), (knz3), (knz4), (knz5)
) as dt(knz)
)
select
kdnr,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 1), '') as knz1,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 2), '') as knz2,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 3), '') as knz3,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 4), '') as knz4,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 5), '') as knz5
from
kunden
-
Wow, vielen Dank !
Vg.
Zitat von Ahoy
Hier eine Variante die die Duplikate entfernt und die Daten wieder in der originalform bereitstellt:
Code:
with
kunden(kdnr, knz1, knz2, knz3, knz4, knz5) as (
values
(1, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE'),
(2, 'AAA', 'BBB', 'BBB', 'CCC', 'DDD')
),
unpivot as (
select distinct
kdnr, knz, dense_rank() over(partition by kdnr order by knz) as knznr
from
kunden
cross join lateral(
values (knz1), (knz2), (knz3), (knz4), (knz5)
) as dt(knz)
)
select
kdnr,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 1), '') as knz1,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 2), '') as knz2,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 3), '') as knz3,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 4), '') as knz4,
ifnull((select knz from unpivot where unpivot.kdnr = kunden.kdnr and knznr = 5), '') as knz5
from
kunden
-
Man kann das Ganze noch um einige Sub-Selects reduzieren:
Code:
with
kunden(kdnr, knz1, knz2, knz3, knz4, knz5) as (
values
(1, 'AAA', 'BBB', 'CCC', 'DDD', 'EEE'),
(2, 'AAA', 'BBB', 'BBB', 'CCC', 'DDD')
),
unpivot as (
select distinct
kdnr, knz, dense_rank() over(partition by kdnr order by knz) as knznr
from
kunden
cross join lateral(
values (knz1), (knz2), (knz3), (knz4), (knz5)
) as dt(knz)
)
select KDNR, Coalesce(Min(Case When knzNr = 1 Then KNZ End), '') as KNZ1,
Coalesce(Min(Case When knzNr = 2 Then KNZ End), '') as KNZ2,
Coalesce(Min(Case When KnzNr = 3 Then KNZ End), '') as KNZ3,
Coalesce(Min(Case When KnzNr = 4 Then KNZ End), '') as KNZ4,
Coalesce(Min(Case When KnzNr = 5 Then KNZ End), '') as KNZ5
From Unpivot
Group by KdNr;
-
Der cross join lateral reicht ja schon.
Der nachfolgende Selekt bringt die Felder ja wieder nebenenander.
Die Funktion Values mit Komma mehrere Zeilen zu erstellen hatte ich nicht mehr auf dem Schirm.
Das liegt auch daran, dass dies nicht in jedem Dialekt (SQL-Server, Oracle, Firebird, ...) unterstützt wird.
Das spart den Union.
Similar Threads
-
By rr2001 in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 09-01-14, 15:19
-
By M.Kasper in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 25-08-06, 07:32
-
By deni87991 in forum IBM i Hauptforum
Antworten: 16
Letzter Beitrag: 31-01-06, 09:41
-
By Schorsch in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 07-05-04, 11:18
-
By Carsten in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 22-01-02, 08:15
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks