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
Table two:
select username, department from jrusers
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
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