Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
zyfer9009
Starting Member
7 Posts |
Posted - 2012-09-06 : 03:30:50
|
I have this sql from an Access database I made. Now I have to use it in a .Net app.(VB.net)Can anyone help me rewrite it.  [code]SELECT Format(b.PanelDate, [dd/mm-yyyy]) AS dato, format(sum(e.PanelDate - b.PanelDate), [hh:mm:ss]) AS Total, IIf([Total] > [08:00:00], format(DATEADD([hh], - 8, [Total]), [hh:mm:ss]), [Total] = NULL) AS Overtid, IIf(Weekday([dato], 2) = 6 OR Weekday([dato], 2) = 7, [Total], NULL) AS WeekendFROM Eventlog AS b, Eventlog AS eWHERE (((e.Paneldate) = (SELECT min(Paneldate) FROM Eventlog WHERE ID1Data = 'Læser 2 (6) T-Reg Gået' OR ID1Data = 'Læser 2 Tinghøj T-Reg Gået' OR ID1Data = 'Læser 2 Haugaard T-Reg Gået' AND PanelDate > b.PanelDate)) AND ((b.ID1Data) = 'Læser 1 (5) T-Reg Kommet' OR (b.ID1Data) = 'Læser 1 Tinghøj T-Reg Kommet' OR (b.ID1Data) = 'Læser 1 Haugaard T-Reg Kommet'))GROUP BY Format(b.PanelDate, [dd/mm-yyyy]); [code/] |
|
|
lionofdezert
Aged Yak Warrior
885 Posts |
Posted - 2012-09-06 : 04:48:55
|
| Please provide table structure for Eventlog . Complete columns and their datatype is requried.--------------------------http://connectsql.blogspot.com/ |
 |
|
|
zyfer9009
Starting Member
7 Posts |
Posted - 2012-09-06 : 05:12:00
|
quote: Originally posted by lionofdezert Please provide table structure for Eventlog . Complete columns and their datatype is requried.--------------------------http://connectsql.blogspot.com/
EventLog:LogId - Primary key - System.Int32Paneldate - Datetime (registration time) - System.DateTimePanelData - Terminal (are not used here) - System.StringId2Data - User ( user that makes the registrantion) - System.StringId1Data - Type of registration coming or going - System.StringGået = goingKommet = coming |
 |
|
|
lionofdezert
Aged Yak Warrior
885 Posts |
Posted - 2012-09-06 : 07:04:28
|
| SELECT CAST(DAY(PanelDate) AS VARCHAR) + '/' + CAST(month(PanelDate) AS VARCHAR) + '-' + CAST(Year(PanelDate) AS VARCHAR) AS dato, sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) AS Total, CASE WHEN sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) > 8 THEN sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) - 8 ELSE NULL END AS Overtid, CASE WHEN DATEPART(dw, CAST(CAST(DAY(PanelDate) AS VARCHAR) + '/' + CAST(month(PanelDate) AS VARCHAR) + '-' + CAST(Year(PanelDate) AS VARCHAR) AS DATETIME)) IN ( 6, 7 ) THEN sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) ELSE NULL END AS WeekendFROM Eventlog AS b, Eventlog AS eWHERE ( ( e.Paneldate ) = ( SELECT min(Paneldate) FROM Eventlog WHERE ID1Data = 'Læser 2 (6) T-Reg Gået' OR ID1Data = 'Læser 2 Tinghøj T-Reg Gået' OR ID1Data = 'Læser 2 Haugaard T-Reg Gået' AND PanelDate > b.PanelDate ) AND ( ( b.ID1Data ) = 'Læser 1 (5) T-Reg Kommet' OR ( b.ID1Data ) = 'Læser 1 Tinghøj T-Reg Kommet' OR ( b.ID1Data ) = 'Læser 1 Haugaard T-Reg Kommet' ) )GROUP BY CAST(DAY(PanelDate) AS VARCHAR) + '/' + CAST(month(PanelDate) AS VARCHAR) + '-' + CAST(Year(PanelDate) AS VARCHAR)--------------------------http://connectsql.blogspot.com/ |
 |
|
|
zyfer9009
Starting Member
7 Posts |
Posted - 2012-09-06 : 07:45:42
|
quote: Originally posted by lionofdezert SELECT CAST(DAY(PanelDate) AS VARCHAR) + '/' + CAST(month(PanelDate) AS VARCHAR) + '-' + CAST(Year(PanelDate) AS VARCHAR) AS dato, sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) AS Total, CASE WHEN sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) > 8 THEN sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) - 8 ELSE NULL END AS Overtid, CASE WHEN DATEPART(dw, CAST(CAST(DAY(PanelDate) AS VARCHAR) + '/' + CAST(month(PanelDate) AS VARCHAR) + '-' + CAST(Year(PanelDate) AS VARCHAR) AS DATETIME)) IN ( 6, 7 ) THEN sum(DATEDIFF(HH, e.PanelDate, b.PanelDate)) ELSE NULL END AS WeekendFROM Eventlog AS b, Eventlog AS eWHERE ( ( e.Paneldate ) = ( SELECT min(Paneldate) FROM Eventlog WHERE ID1Data = 'Læser 2 (6) T-Reg Gået' OR ID1Data = 'Læser 2 Tinghøj T-Reg Gået' OR ID1Data = 'Læser 2 Haugaard T-Reg Gået' AND PanelDate > b.PanelDate ) AND ( ( b.ID1Data ) = 'Læser 1 (5) T-Reg Kommet' OR ( b.ID1Data ) = 'Læser 1 Tinghøj T-Reg Kommet' OR ( b.ID1Data ) = 'Læser 1 Haugaard T-Reg Kommet' ) )GROUP BY CAST(DAY(PanelDate) AS VARCHAR) + '/' + CAST(month(PanelDate) AS VARCHAR) + '-' + CAST(Year(PanelDate) AS VARCHAR)--------------------------http://connectsql.blogspot.com/
Thank you so much for the answer but i get an error " Ambiguous Column name 'PanelDate'" |
 |
|
|
xloafery
Starting Member
5 Posts |
Posted - 2012-09-07 : 02:51:11
|
| replace PanelDate with b.Paneldate to specify which table to get the column from. Ambiguous Column means there's more than one with that name. |
 |
|
|
zyfer9009
Starting Member
7 Posts |
Posted - 2012-09-07 : 03:49:05
|
quote: Originally posted by xloafery replace PanelDate with b.Paneldate to specify which table to get the column from. Ambiguous Column means there's more than one with that name.
Hey. And thanks..:-)New error now - "The conversion of a varchar data type to a datetime data type resulted in an out-of range value" |
 |
|
|
Ifor
Aged Yak Warrior
700 Posts |
Posted - 2012-09-07 : 12:10:04
|
You will get better answers if you provide example data and results.You should really do the formating in your application.Assuming 2008 or above:WITH TotalsAS( SELECT DATEADD(d, DATEDIFF(d, 0, E.PanelDate), 0) AS dato ,SUM(DATEDIFF(s, E.PanelDate, D.PanelDate)) AS TotalSeconds FROM Eventlog E CROSS APPLY ( SELECT MIN(E1.PanelDate) AS PanelDate FROM Eventlog E1 WHERE E1.PanelDate > E.PanelDate AND E1.ID1Data IN ( 'Læser 2 (6) T-Reg Gået' ,'Læser 2 Tinghøj T-Reg Gået' ,'Læser 2 Haugaard T-Reg Gået' ) ) D WHERE E.ID1Data IN ( 'Læser 1 (5) T-Reg Kommet' ,'Læser 1 Tinghøj T-Reg Kommet' ,'Læser 1 Haugaard T-Reg Kommet' ) GROUP BY DATEADD(d, DATEDIFF(d, 0, E.PanelDate), 0)),Weekends(WE)AS( SELECT DATEPART(dw,'20120908') UNION ALL SELECT DATEPART(dw,'20120909')),UnformatedAS( SELECT dato, TotalSeconds ,CASE WHEN TotalSeconds > (8 * 60 * 60) THEN TotalSeconds - (8 * 60 * 60) END AS OvertidSeconds ,CASE WHEN DATEPART(dw, dato) IN (SELECT WE FROM Weekends) THEN TotalSeconds END AS WeekendSeconds FROM Totals)SELECT *FROM Unformated--SELECT STUFF(CONVERT(char(10), dato, 103), 6, 1, '-') AS dato-- ,RIGHT('0' + CAST(TotalSeconds / (60 * 60) AS varchar(2)), 2)-- + ':'-- + RIGHT('0' + CAST(TotalSeconds / 60 - (((TotalSeconds / (60 * 60)) * 60) AS varchar(2)), 2)-- + ':'-- + RIGHT('0' + CAST(TotalSeconds % 60 AS varchar(2)), 2) AS Total-- ,RIGHT('0' + CAST(OvertidSeconds / (60 * 60) AS varchar(2)), 2)-- + ':'-- + RIGHT('0' + CAST(OvertidSeconds / 60 - (((OvertidSeconds / (60 * 60)) * 60) AS varchar(2)), 2)-- + ':'-- + RIGHT('0' + CAST(OvertidSeconds % 60 AS varchar(2)), 2) AS Overtid-- ,RIGHT('0' + CAST(WeekendSeconds / (60 * 60) AS varchar(2)), 2)-- + ':'-- + RIGHT('0' + CAST(WeekendSeconds / 60 - (((WeekendSeconds / (60 * 60)) * 60) AS varchar(2)), 2)-- + ':'-- + RIGHT('0' + CAST(WeekendSeconds % 60 AS varchar(2)), 2) AS Weekend--FROM Unformated |
 |
|
|
zyfer9009
Starting Member
7 Posts |
Posted - 2012-09-11 : 06:22:36
|
quote: Originally posted by Ifor You will get better answers if you provide example data and results.You should really do the formating in your application.Assuming 2008 or above:
HELP :-)This is what I have now....WITH Totals AS (SELECT DATEADD(d, DATEDIFF(d, 0, E.PanelDate), 0) AS dato, SUM(DATEDIFF(s, E.PanelDate, D .PanelDate)) AS TotalSecondsFROM Eventlog E CROSS APPLY(SELECT MIN(E1.PanelDate) AS PanelDate FROM Eventlog E1 WHERE E1.PanelDate > E.PanelDate AND E1.ID1Data IN ('Læser 2 (6) T-Reg Gået', 'Læser 2 Tinghøj T-Reg Gået', 'Læser 2 Haugaard T-Reg Gået')) DWHERE E.ID1Data IN ('Læser 1 (5) T-Reg Kommet', 'Læser 1 Tinghøj T-Reg Kommet', 'Læser 1 Haugaard T-Reg Kommet') AND ID2Data=@IMPGROUP BY DATEADD(d, DATEDIFF(d, 0, E.PanelDate), 0)), Weekends(WE) AS(SELECT DATEPART(dw, '20120908')UNION ALLSELECT DATEPART(dw, '20120909')), Unformated AS(SELECT dato,CASE WHEN DATEPART(dw, dato) IN (SELECT WE FROM Weekends) THEN NULL ELSE (CASE WHEN TotalSeconds>(8*60*60) THEN (8*60*60) ELSE TotalSeconds END) END AS TotalSeconds,CASE WHEN DATEPART(dw, dato) IN (SELECT WE FROM Weekends) THEN TotalSeconds END AS WeekendSeconds,CASE WHEN DATEPART(dw, dato) IN (SELECT WE FROM Weekends) THEN NULL ELSE (CASE WHEN TotalSeconds > (8 * 60 * 60) THEN TotalSeconds - (8 * 60 * 60) END) END AS OvertidSecondsFROM Totals)SELECT (SELECT CONVERT(VARCHAR(10), Dato, 105) AS [DD/MM/YYYY]) AS Dato, (SELECT CONVERT(varchar(6), TotalSeconds / 3600) + ':' + RIGHT('0' + CONVERT(varchar(2), (TotalSeconds % 3600) / 60), 2) + ':' + RIGHT('0' + CONVERT(varchar(2), TotalSeconds % 60), 2)) AS Total, (SELECT CONVERT(varchar(6), OvertidSeconds / 3600) + ':' + RIGHT('0' + CONVERT(varchar(2), (OvertidSeconds % 3600) / 60), 2) + ':' + RIGHT('0' + CONVERT(varchar(2), OvertidSeconds % 60), 2)) AS Overtid, (SELECT CONVERT(varchar(6), WeekendSeconds / 3600) + ':' + RIGHT('0' + CONVERT(varchar(2), (WeekendSeconds % 3600) / 60), 2) + ':' + RIGHT('0' + CONVERT(varchar(2), WeekendSeconds % 60), 2)) AS WeekendFROM UnformatedWHERE Dato >= @Start AND Dato < @Slut;Problem, it calculate wrong .. :-(@Start = 31-05-2012@Slut = 01-06-2012@IMP = Bettina BentsenDATA :PanelDate----------PanelData--------ID2Data------------ID1Data----31-05-2012 03:58---Terminal3BOX2)---Bettina Bentsen---Læser 1 (5) T-Reg Kommet (Meeting)31-05-2012 08:59---Terminal3BOX2)---Bettina Bentsen---Læser 2 (6) T-Reg Gået (Going)31-05-2012 09:28---Terminal3BOX2)---Bettina Bentsen---Læser 1 (5) T-Reg Kommet (Meeting) 31-05-2012 12:52---Terminal3BOX2)---Bettina Bentsen---Læser 2 (6) T-Reg Gået (Going)31-05-2012 13:16---Terminal3BOX2)---Bettina Bentsen---Læser 1 (5) T-Reg Kommet (Meeting)31-05-2012 22:51---Terminal3BOX2)---Bettina Bentsen---Læser 2 (6) T-Reg Gået (Going)TOTAL TIME = 18:00:00SQL calculates = 9:07:15 HELP :-) .... |
 |
|
|
Ifor
Aged Yak Warrior
700 Posts |
Posted - 2012-09-11 : 11:06:09
|
| [code]-- *** Test Data ***CREATE TABLE #EventLog( PanelDate datetime NOT NULL ,PanelData nvarchar(50) NOT NULL ,ID2Data nvarchar(50) NOT NULL ,ID1Data nvarchar(50) NOT NULL);INSERT INTO #EventLogSELECT '20120531 03:58', 'Terminal3BOX2', 'Bettina Bentsen', 'Læser 1 (5) T-Reg Kommet'UNION ALL SELECT '20120531 08:59', 'Terminal3BOX2', 'Bettina Bentsen', 'Læser 2 (6) T-Reg Gået'UNION ALL SELECT '20120531 09:28', 'Terminal3BOX2', 'Bettina Bentsen', 'Læser 1 (5) T-Reg Kommet'UNION ALL SELECT '20120531 12:52', 'Terminal3BOX2', 'Bettina Bentsen', 'Læser 2 (6) T-Reg Gået'UNION ALL SELECT '20120531 13:16', 'Terminal3BOX2', 'Bettina Bentsen', 'Læser 1 (5) T-Reg Kommet'UNION ALL SELECT '20120531 22:51', 'Terminal3BOX2', 'Bettina Bentsen', 'Læser 2 (6) T-Reg Gået';-- *** End Test Data ***WITH TotalsAS( SELECT DATEADD(d, DATEDIFF(d, 0, E.PanelDate), 0) AS dato ,SUM(DATEDIFF(s, E.PanelDate, D.PanelDate)) AS TotalSeconds FROM #Eventlog E CROSS APPLY ( SELECT MIN(E1.PanelDate) AS PanelDate FROM #Eventlog E1 WHERE E1.PanelDate > E.PanelDate AND E1.ID1Data IN ( 'Læser 2 (6) T-Reg Gået' ,'Læser 2 Tinghøj T-Reg Gået' ,'Læser 2 Haugaard T-Reg Gået' ) ) D WHERE E.ID1Data IN ( 'Læser 1 (5) T-Reg Kommet' ,'Læser 1 Tinghøj T-Reg Kommet' ,'Læser 1 Haugaard T-Reg Kommet' ) GROUP BY DATEADD(d, DATEDIFF(d, 0, E.PanelDate), 0)),Weekends(WE)AS( SELECT DATEPART(dw,'20120908') UNION ALL SELECT DATEPART(dw,'20120909')),UnformatedAS( SELECT dato, TotalSeconds ,CASE WHEN TotalSeconds > (8 * 60 * 60) THEN TotalSeconds - (8 * 60 * 60) END AS OvertidSeconds ,CASE WHEN DATEPART(dw, dato) IN (SELECT WE FROM Weekends) THEN TotalSeconds END AS WeekendSeconds FROM Totals)--SELECT *--FROM Unformated;SELECT STUFF(CONVERT(char(10), dato, 103), 6, 1, '-') AS dato ,RIGHT('0' + CAST(TotalSeconds / (60 * 60) AS varchar(2)), 2) + ':' + RIGHT('0' + CAST(TotalSeconds / 60 - (((TotalSeconds / (60 * 60)) * 60)) AS varchar(2)), 2) + ':' + RIGHT('0' + CAST(TotalSeconds % 60 AS varchar(2)), 2) AS Total ,RIGHT('0' + CAST(OvertidSeconds / (60 * 60) AS varchar(2)), 2) + ':' + RIGHT('0' + CAST(OvertidSeconds / 60 - (((OvertidSeconds / (60 * 60)) * 60)) AS varchar(2)), 2) + ':' + RIGHT('0' + CAST(OvertidSeconds % 60 AS varchar(2)), 2) AS Overtid ,RIGHT('0' + CAST(WeekendSeconds / (60 * 60) AS varchar(2)), 2) + ':' + RIGHT('0' + CAST(WeekendSeconds / 60 - (((WeekendSeconds / (60 * 60)) * 60)) AS varchar(2)), 2) + ':' + RIGHT('0' + CAST(WeekendSeconds % 60 AS varchar(2)), 2) AS WeekendFROM UnformatedWHERE dato >= '20120531' AND dato < '20120601'[/code] |
 |
|
|
zyfer9009
Starting Member
7 Posts |
Posted - 2012-09-13 : 07:29:13
|
quote: Originally posted by Ifor [code]-- *** Test Data ***CREATE TABLE #EventLog( PanelDate datetime NOT NULL ,PanelData nvarchar(50) NOT NULL ,ID2Data nvarchar(50) NOT NULL ,ID1Data nvarchar(50) NOT NULL
Numerous Thanks, It was my variable @ IMP that were teasing.Just a little thing. How can I count all come and go times, and then compare them.In the style of this.."CASE WHEN (COUNT(E.Paneldate)=COUNT(D.PanelDate)) THEN 1 ELSE 0 END AS Tjek"I need it to see if there is a lack of entries. There should be equal numbers come and go times.Again, many thanks for your help |
 |
|
|
|
|
|
|
|