Skip to content
Advertisement

Dynamic columns from two tables

i need some help. I would like to combine two tables in sql with dynamical columns. Here my thoughts:

Table one:

select processname, step, steplabel, username, incident, indate, outdate, status from jrincidents

Example Table jrincidents

Table two:

select username, department from jrusers

Example Table jrusers

reporting like

i don’t know how to dynamically add the steplabels from table jrincidents as columns of jrusers if where processname = x

Thanks for helping

ADD:

Let me try again

The Result should look something like that

Result

select distinct a.department, 
(select count(b.incident) from Auswertungsvorlage_Prozess as b where b.processname = 'rechnungseingang' and b.department = a.department ) as Anzahl,
(select avg(datediff(MINUTE,n.indate,n.outdate)) as avg_min from Auswertungsvorlage_Prozess as n where n.processname = 'rechnungseingang' and n.department = a.department and n.steplabel ='Erfassung und Verteilung ') as Erfassung_und_Verteilung,
(select avg(datediff(MINUTE,c.indate,c.outdate)) as avg_min from Auswertungsvorlage_Prozess as c where c.processname = 'rechnungseingang' and c.department = a.department and c.steplabel ='Handelspartner / Bank anlegen') as Handelspartner_Bank_anlegen,
(select avg(datediff(MINUTE,d.indate,d.outdate)) as avg_min from Auswertungsvorlage_Prozess as d where d.processname = 'rechnungseingang' and d.department = a.department and d.steplabel ='Sachliche Prüfung') as Sachliche_Prüfung,
(select avg(datediff(MINUTE,e.indate,e.outdate)) as avg_min from Auswertungsvorlage_Prozess as e where e.processname = 'rechnungseingang' and e.department = a.department and e.steplabel ='Freigabe') as Freigabe,
(select avg(datediff(MINUTE,f.indate,f.outdate)) as avg_min from Auswertungsvorlage_Prozess as f where f.processname = 'rechnungseingang' and f.department = a.department and f.steplabel ='Prüfung durch den Einkauf') as Prüfung_durch_den_Einkauf,
(select avg(datediff(MINUTE,g.indate,g.outdate)) as avg_min from Auswertungsvorlage_Prozess as g where g.processname = 'rechnungseingang' and g.department = a.department and g.steplabel ='Rückfrage zur Rechnung') as Rückfrage_zur_Rechnung,
(select avg(datediff(MINUTE,h.indate,h.outdate)) as avg_min from Auswertungsvorlage_Prozess as h where h.processname = 'rechnungseingang' and h.department = a.department and h.steplabel ='Rechnung abweisen') as Rechnung_abweisen,
(select avg(datediff(MINUTE,i.indate,i.outdate)) as avg_min from Auswertungsvorlage_Prozess as i where i.processname = 'rechnungseingang' and i.department = a.department and i.steplabel ='Buchung') as Buchung,
(select avg(datediff(MINUTE,j.indate,j.outdate)) as avg_min from Auswertungsvorlage_Prozess as j where j.processname = 'rechnungseingang' and j.department = a.department and j.steplabel ='DocuWare Indexierung') as DocuWare_Indexierung,
(select avg(datediff(MINUTE,k.indate,k.outdate)) as avg_min from Auswertungsvorlage_Prozess as k where k.processname = 'rechnungseingang' and k.department = a.department and k.steplabel ='Protokoll anklammern') as Protokoll_anklammern,
(select avg(datediff(MINUTE,l.indate,l.outdate)) as avg_min from Auswertungsvorlage_Prozess as l where l.processname = 'rechnungseingang' and l.department = a.department and l.steplabel ='Anhänge anheften') as Anhänge_anheften,
(select avg(datediff(MINUTE,m.indate,m.outdate)) as avg_min from Auswertungsvorlage_Prozess as m where m.processname = 'rechnungseingang' and m.department = a.department and m.steplabel ='Übergabe an Infor') as Übergabe_an_Infor,
(select avg(datediff(MINUTE,o.indate,o.outdate)) as avg_min from Auswertungsvorlage_Prozess as o where o.processname = 'rechnungseingang' and o.department = a.department) as Zeit_Durchschnitt,
(select avg(datediff(MINUTE,p.indate,p.outdate)) * 10 as avg_cost from Auswertungsvorlage_Prozess as p where p.processname = 'rechnungseingang' and p.department = a.department) as Kosten
from Auswertungsvorlage_Prozess as a where a.processname = 'rechnungseingang';

The department and steplabel should be dynamic like a filter.

If i change the processname to “rechnungseingang” the select should chose the different steplabels and departments dynamic from a subtable row as a column in the select. Like a move from vertical(row) to horizontal(column).

Data Table:

department  step    steplabel   incident    indate  outdate processname
    1   Beschaffungsantrag erfassen 897 2020-09-22 12:07:44.000 2020-09-24 11:10:29.000 beschaffung
    7   A1 Entsendeantrag ergänzen  9   2020-05-19 14:33:05.000 2020-05-19 16:07:37.000 dienstreise
    7   A1 Entsendeantrag ergänzen  9   2020-05-19 16:07:37.000 2020-05-19 16:09:09.000 dienstreise
    10  Bestellung durch den Einkauf    61  2020-01-30 14:42:52.000 2020-02-05 13:08:18.000 beschaffung
    10  Genehmigung durch die GL    1   2020-01-14 10:39:15.000 2020-01-17 12:13:44.000 investantrag
    10  Genehmigung durch die GL    1   2020-01-17 12:13:45.000 2020-01-17 12:13:59.000 investantrag
    20  Info zur genehmigten Dienstreise    6   2020-01-27 12:54:16.000 2020-02-06 10:59:12.000 dienstreise
    20  Info zur genehmigten Dienstreise    17  2020-01-31 13:14:57.000 2020-02-06 10:59:12.000 dienstreise
    50  Info zur Bestellung 61  2020-02-05 17:50:15.000 2020-02-06 10:07:24.000 beschaffung
    50  Info zur Zahlung    2   2020-01-30 15:36:36.000 2020-02-06 10:29:50.000 zahlungsanweisung
    50  Info zur Zahlung    2   2020-02-06 10:29:50.000 2020-02-06 10:49:24.000 zahlungsanweisung
    50  Info zur Zahlung    2   2020-02-06 10:49:24.000 2020-02-06 10:49:59.000 zahlungsanweisung
AFS 1   Beschaffungsantrag erfassen 61  2020-01-27 11:40:45.000 2020-01-27 11:40:45.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 82  2020-01-30 10:16:31.000 2020-01-30 10:16:31.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 224 2020-03-02 11:13:42.000 2020-03-02 11:13:42.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 363 2020-04-02 12:14:53.000 2020-04-02 12:14:53.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 482 2020-05-13 07:36:30.000 2020-05-13 07:36:30.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 784 2020-08-14 15:06:34.000 2020-08-14 15:06:34.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 835 2020-09-01 08:03:53.000 2020-09-01 08:03:53.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 955 2020-10-06 15:36:36.000 2020-10-06 15:36:36.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 1035    2020-10-27 12:24:04.000 2020-10-27 12:24:04.000 beschaffung
AFS 1   Beschaffungsantrag erfassen 1077    2020-11-05 15:54:08.000 2020-11-05 15:54:08.000 beschaffung
AFS 20  Empfang der Ware bestätigen 82  2020-02-01 09:07:25.000 2020-03-13 10:54:14.000 beschaffung
AFS 20  Empfang der Ware bestätigen 61  2020-02-05 17:50:15.000 2020-02-28 08:45:47.000 beschaffung
AFS 20  Empfang der Ware bestätigen 224 2020-03-04 19:14:23.000 2020-03-13 10:53:56.000 beschaffung
AFS 20  Empfang der Ware bestätigen 482 2020-05-19 08:58:48.000 2020-10-06 14:54:46.000 beschaffung
AFS 50  Info zur Bestellung 61  2020-02-06 10:07:24.000 2020-02-28 08:45:08.000 beschaffung
AVK 1   Beschaffungsantrag erfassen 7   2020-01-13 15:51:45.000 2020-01-13 15:51:45.000 beschaffung
AVK 1   Beschaffungsantrag erfassen 62  2020-01-27 12:05:45.000 2020-01-27 12:05:45.000 beschaffung
AVK 1   Beschaffungsantrag erfassen 472 2020-05-08 11:01:24.000 2020-05-08 11:01:24.000 beschaffung
AVK 10  Sichtung & Bearbeitung  478 2020-08-04 09:31:38.000 2020-08-04 10:13:03.000 post
AVK 20  Empfang der Ware bestätigen 7   2020-01-22 09:03:42.000 2020-02-12 11:29:59.000 beschaffung
AVK 20  Empfang der Ware bestätigen 62  2020-01-28 16:40:02.000 2020-07-10 08:34:02.000 beschaffung
AVK 20  Empfang der Ware bestätigen 472 2020-05-12 11:39:46.000 2020-07-10 13:09:41.000 beschaffung
AVK 50  Info an Besteller   472 2020-05-12 11:39:46.000 2020-05-12 13:02:59.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 942 2020-10-02 09:37:05.000 2020-10-02 09:37:05.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 942 2020-10-02 09:50:02.000 2020-10-02 10:28:18.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 948 2020-10-06 08:23:32.000 2020-10-06 08:23:32.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 948 2020-10-06 09:09:27.000 2020-10-08 08:27:50.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 961 2020-10-08 08:35:53.000 2020-10-08 08:35:53.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 961 2020-10-08 10:00:39.000 2020-10-08 11:01:23.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 963 2020-10-08 11:10:28.000 2020-10-08 11:10:28.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 967 2020-10-12 07:51:45.000 2020-10-12 07:51:45.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 968 2020-10-12 07:57:36.000 2020-10-12 07:57:36.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 969 2020-10-12 11:09:48.000 2020-10-12 11:09:48.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 970 2020-10-12 14:22:04.000 2020-10-12 14:22:04.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 971 2020-10-12 14:24:19.000 2020-10-12 14:24:19.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 970 2020-10-12 15:25:05.000 2020-10-12 15:35:41.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 1036    2020-10-27 14:38:44.000 2020-10-27 14:38:44.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 1048    2020-10-29 10:25:16.000 2020-10-29 10:25:16.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 1051    2020-10-29 13:40:48.000 2020-10-29 13:40:48.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 1062    2020-11-03 17:38:40.000 2020-11-03 17:38:40.000 beschaffung
AVZ 1   Beschaffungsantrag erfassen 1075    2020-11-05 11:15:45.000 2020-11-05 11:15:45.000 beschaffung
AVZ 1   Einkaufsreklamation erfassen    1   2020-01-23 08:09:17.000 2020-01-23 08:09:17.000 ekreklamation
AVZ 1   Einkaufsreklamation erfassen    2   2020-01-23 08:23:23.000 2020-01-23 08:23:23.000 ekreklamation
AVZ 1   Einkaufsreklamation erfassen    3   2020-01-27 08:53:47.000 2020-01-27 08:53:47.000 ekreklamation
AVZ 1   Einkaufsreklamation erfassen    4   2020-01-31 08:48:38.000 2020-01-31 08:48:38.000 ekreklamation
AVZ 1   Einkaufsreklamation erfassen    8   2020-02-28 08:35:54.000 2020-07-09 15:42:31.000 ekreklamation
AVZ 1   Einkaufsreklamation erfassen    40  2020-09-02 09:29:52.000 2020-09-02 09:29:52.000 ekreklamation
AVZ 8   Rückfrage zur Reklamation   1   2020-01-23 15:16:59.000 2020-01-24 07:50:06.000 ekreklamation
AVZ 8   Rückfrage zur Reklamation   2   2020-01-23 15:18:06.000 2020-01-24 07:58:16.000 ekreklamation
AVZ 8   Rückfrage zur Reklamation   40  2020-09-11 11:06:20.000 2020-09-15 07:05:43.000 ekreklamation
AVZ 9   Info zur Reklamation    7   2020-01-17 08:43:14.000 2020-01-20 08:05:56.000 reklamation
AVZ 9   Info zur Reklamation    10  2020-01-21 13:11:57.000 2020-01-21 14:42:28.000 reklamation
AVZ 9   Info zur Reklamation    25  2020-03-02 13:56:48.000 2020-03-04 08:20:37.000 reklamation
AVZ 9   Info zur Reklamation    27  2020-03-04 08:16:26.000 2020-03-04 08:22:46.000 reklamation
AVZ 9   Info zur Reklamation    28  2020-03-05 08:46:19.000 2020-03-05 08:48:07.000 reklamation
AVZ 9   Info zur Reklamation    29  2020-03-05 10:34:45.000 2020-03-05 10:38:34.000 reklamation
AVZ 9   Info zur Reklamation    29  2020-03-05 10:34:46.000 2020-03-05 15:19:06.000 reklamation
AVZ 9   Info zur Reklamation    30  2020-03-06 08:26:01.000 2020-03-06 08:31:17.000 reklamation
AVZ 9   Info zur Reklamation    32  2020-03-12 13:11:21.000 2020-03-16 07:56:02.000 reklamation
AVZ 9   Info zur Reklamation    34  2020-04-06 08:10:50.000 2020-04-06 08:35:38.000 reklamation
AVZ 9   Info zur Reklamation    34  2020-04-06 08:10:51.000 2020-05-20 14:13:16.000 reklamation
AVZ 9   Info zur Reklamation    42  2020-05-20 14:03:33.000 2020-05-20 14:15:01.000 reklamation
AVZ 9   Info zur Reklamation    58  2020-08-31 08:07:24.000 2020-09-02 09:25:20.000 reklamation
AVZ 12  Stellungnahme zur Reklamation   1   2020-01-16 10:54:29.000 2020-01-21 14:42:02.000 reklamation
AVZ 12  Stellungnahme zur Reklamation   2   2020-01-16 10:55:10.000 2020-01-21 14:56:15.000 reklamation
AVZ 12  Stellungnahme zur Reklamation   22  2020-02-19 09:21:11.000 2020-02-21 12:02:54.000 reklamation
AVZ 12  Stellungnahme zur Reklamation   55  2020-08-11 14:32:50.000 2020-08-12 07:50:20.000 reklamation
AVZ 12  Stellungnahme zur Reklamation   55  2020-08-11 14:32:50.000 2020-08-31 08:09:32.000 reklamation
AVZ 18  Rückfrage zur Rechnung  2919    2020-06-04 14:21:52.000 2020-06-05 13:33:03.000 rechnungseingang
AVZ 20  Empfang der Ware bestätigen 967 2020-10-12 13:58:53.000 2020-11-03 16:28:18.000 beschaffung
AVZ 20  Empfang der Ware bestätigen 968 2020-10-12 15:33:38.000 2020-11-03 16:28:03.000 beschaffung
AVZ 20  Empfang der Ware bestätigen 969 2020-10-22 12:01:14.000 2020-11-02 15:28:52.000 beschaffung
AVZ 50  Info an Besteller   967 2020-10-12 13:58:53.000 2020-10-22 13:03:33.000 beschaffung
AVZ 50  Info an Besteller   968 2020-10-12 15:33:38.000 2020-10-22 13:03:18.000 beschaffung
AVZ 50  Info an Besteller   971 2020-10-12 16:23:39.000 2020-10-22 13:03:01.000 beschaffung
AVZ 50  Info an Besteller   970 2020-10-16 10:39:10.000 2020-10-22 13:02:46.000 beschaffung
AVZ 50  Info an Besteller   969 2020-10-22 12:01:14.000 2020-10-22 13:02:14.000 beschaffung
AVZ 50  Info zur Reklamation    2   2020-01-28 14:29:33.000 2020-03-05 15:19:34.000 ekreklamation
AVZ 50  Info zur Reklamation    4   2020-02-11 17:56:42.000 2020-03-05 15:19:54.000 ekreklamation
AVZ 50  Info zur Reklamation    1   2020-02-11 17:58:02.000 2020-03-05 15:20:14.000 ekreklamation
AVZ 50  Info zur Reklamation    3   2020-02-11 18:06:49.000 2020-03-05 15:20:40.000 ekreklamation
AVZ 50  Info zur Reklamation    8   2020-07-10 13:59:49.000 2020-07-13 07:31:59.000 ekreklamation
AVZ 50  Info zur Reklamation    40  2020-09-22 11:19:19.000 2020-09-22 12:59:27.000 ekreklamation
BLG 1   Bewegung von Anlagevermögen beantragen  1   2020-01-14 10:03:29.000 2020-01-14 10:03:29.000 anlagebewegung
BLG 1   Bewegung von Anlagevermögen beantragen  2   2020-01-14 10:04:44.000 2020-01-14 10:04:44.000 anlagebewegung
BLG 1   Bewegung von Anlagevermögen beantragen  3   2020-01-24 07:45:16.000 2020-01-24 07:45:16.000 anlagebewegung
BLG 1   Bewegung von Anlagevermögen beantragen  4   2020-01-27 11:20:56.000 2020-01-27 11:20:56.000 anlagebewegung
BLG 1   Bewegung von Anlagevermögen beantragen  5   2020-01-27 11:22:00.000 2020-01-27 11:22:00.000 anlagebewegung

Advertisement

Answer

I wrote a procedure:

DECLARE @cnt INT = 0;                   
DECLARE @stepid INT = 0;                    
DECLARE @cnttable INT = 0;                  
DECLARE @steplabelname VARCHAR(500);                    
DECLARE @sqlCommand NVARCHAR(4000);                 
DECLARE @process varchar(75);                   
DECLARE @variable VARCHAR(10);                  
DECLARE @ParmDefinition NVARCHAR(500);                  
SET @process = 'rechnungseingang'                   
DECLARE @variabletemptable VARCHAR(20);                 
SET @variabletemptable = 'temprg'                   
                    
EXECUTE sp_refreshview 'Auswertungsvorlage_Prozess'                     
WHILE @cnt <= (select max(step) from Auswertungsvorlage_Prozess where processname =  @process)                  
BEGIN                   
    IF EXISTS (select distinct step from Auswertungsvorlage_Prozess where processname = @process and step = @cnt)               
        Begin           
                    SET @cnttable += 1
                    SET @variable = 'a'
                    SET @steplabelname = (select distinct REPLACE(REPLACE(REPLACE(steplabel,' ', '_'),'_/_','_'),'_&_','_') from Auswertungsvorlage_Prozess where processname = @process and step = @cnt)+ '_' + CAST((select distinct step from Auswertungsvorlage_Prozess where processname = @process and step = @cnt) as varchar(10))
                    SET @sqlCommand = 'SELECT department, count(incident) ' + @steplabelname +', 
                    CAST(avg([dbo].[GetTotalWorkingMins](indate,outdate) -  [dbo].[GetMinProcess](step,processname,indate,outdate)) as decimal (18,2)) as Liegezeit_in_Minuten,
                    (CAST(avg([dbo].[GetTotalWorkingMins](indate,outdate) -  [dbo].[GetMinProcess](step,processname,indate,outdate)) as decimal (18,2)) / count(incident)) as Min_pro_STK,
                    (count(incident) * [dbo].[GetHours](step)) as Schrittzeit_Min,
                    (count(incident) * [dbo].[GetHours](step))/(221*435) as kalk_FTE,
                    (count(incident) * [dbo].[GetHours](step)) / (count(incident)) as Min,
                    count(incident) * CAST(([dbo].[GetHours](step) * [dbo].[GetCostMin](department)) as decimal (18,2)) as Summe_Kosten_Schritt,
                    (count(incident) * CAST(([dbo].[GetHours](step) * [dbo].[GetCostMin](department)) as decimal (18,2)) )/ count(incident) as Euro_Anz,
                    (count(incident) * CAST(([dbo].[GetHours](step) * [dbo].[GetCostMin](department)) as decimal (18,2))) / CAST(avg([dbo].[GetTotalWorkingMins](indate,outdate) -  [dbo].[GetMinProcess](step,processname,indate,outdate)) as decimal (18,2)) as Kosten_STK,
                    count(incident) * (CAST(avg([dbo].[GetTotalWorkingMins](indate,outdate) -  [dbo].[GetMinProcess](step,processname,indate,outdate)) as decimal (18,2)) + [dbo].[GetHours](step)) as Dauer_Gesamt_Total,
                    count(incident) * (CAST(avg(([dbo].[GetTotalWorkingMins](indate,outdate) -  [dbo].[GetMinProcess](step,processname,indate,outdate) ) * [dbo].[GetCostMin](department)) as decimal (18,2))) + count(incident) * CAST(([dbo].[GetHours](step) * [dbo].[GetCostMin](department)) as decimal (18,2)) as Kosten_Gesamt_Total '
                     + ' INTO ' +@variabletemptable +' from Auswertungsvorlage_Prozess ' + @variable + ' where processname = @process and step = @cnt group by department, steplabel, step'
                    SET @ParmDefinition = N'@cnt INT, @process NVARCHAR(75), @variable VARCHAR(10), @variabletemptable VARCHAR(20)'; 
                    EXECUTE sp_executesql @sqlCommand, @ParmDefinition ,@cnt = @cnt, @process = @process, @variable = @variable, @variabletemptable = @variabletemptable
                    SET @variable += 'a'
                    SET @variabletemptable += 'a'
        END         
   SET @cnt = @cnt + 1;                 
END                 
                    
GO
5 People found this is helpful
Advertisement