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 |
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-09-30 : 11:43:44
|
So I had the following query:SELECT DISTINCT [Scratchpad1].Employee_Number, IIf([dif]<0,[Break]+[dif],[Break]) AS Paid, [ScratchPad1].name, [ScratchPad1].Date, [ScratchPad1].Day, IIf([OnTime1]>=225 And [OnTime1]<450,[OnTime1]+15,[OnTime1]+30) AS Break, Sum([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Break] AS dif INTO Scratchpad2FROM ScratchPad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, IIf([OnTime1]>=225 And [OnTime1]<450,[OnTime1]+15,[OnTime1]+30), [ScratchPad1].LogInHAVING (((Sum([1_1ScratchPad].OnTime1))>=225)); which was written in Access by someone else and I've changed it to this:SELECT DISTINCT [Scratchpad1].EmployeeNumber, [ScratchPad1].Day,case when [OnTime1]>=225 then [OnTime1] <=450 when [OnTime1]+15 then [OnTime1]+30) AS Breaks, Sum([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaks] AS dif INTO Scratchpad2FROM ScratchPad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, IIf([OnTime1]>=225 And [OnTime1]<450,[OnTime1]+15,[OnTime1]+30), [ScratchPad1].LogIn But I'm getting this error:Server: Msg 170, Level 15, State 1, Line 2Line 2: Incorrect syntax near '<'.Can someone please point out to me what's wrong with the syntax as I've written it?Thank youDoug |
|
jleitao
Posting Yak Master
100 Posts |
Posted - 2010-09-30 : 12:06:57
|
Look at this line:...case when [OnTime1]>=225 then [OnTime1] <=450 when [OnTime1]+15 then [OnTime1]+30) AS Breaks,...you have "... then [OnTime1] <=450 ..."i think you need "...And [OnTime1]<450 then [OnTime1]+15 ..."SELECT DISTINCT [Scratchpad1].EmployeeNumber, [ScratchPad1].Day,case when [OnTime1]>=225 AND [OnTime1] <=450 then [OnTime1]+15 ELSE [OnTime1]+30 END AS Breaks, Sum([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaks] AS dif INTO Scratchpad2FROM ScratchPad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, IIf([OnTime1]>=225 And [OnTime1]<450,[OnTime1]+15,[OnTime1]+30), [ScratchPad1].LogInhowever i think your query is not right...you have:"...case when [OnTime1]>=225 AND [OnTime1] <=450...IIf([OnTime1]>=225 And [OnTime1]<450,..." |
|
|
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-09-30 : 12:25:26
|
Jleitao,Thank you and sorry about the query. I'd added some things for testing but hadn't removed them before posting. Here is the new query:SELECT DISTINCT [Scratchpad1].EmployeeNumber, [ScratchPad1].Day,case when [OnTime1]>=225 and [OnTime1] <=450 or [OnTime1]+15 then [OnTime1]+30 AS Breaks, Sum([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaks] AS dif INTO Scratchpad2FROM Scratchpad1 now it's telling me that my error is:Server: Msg 156, Level 15, State 1, Line 2Incorrect syntax near the keyword 'then'. |
|
|
jleitao
Posting Yak Master
100 Posts |
Posted - 2010-09-30 : 12:36:31
|
you welcome.I think you need:SELECT DISTINCT [Scratchpad1].EmployeeNumber, [ScratchPad1].Day,case when [OnTime1]>=225 and [OnTime1] <=450 THEN [OnTime1]+15 ELSE [OnTime1]+30 end AS Breaks, Sum([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaks] AS dif INTO Scratchpad2FROM Scratchpad1And you need a "group by" because you have a agregate function (SUM) in your select |
|
|
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-09-30 : 13:02:59
|
Jl,I do have a group by statement, I just didn't include it in this thread. I'm trying to correct what I can piece by piece. Here's the last pieces of this query:[code]SELECT DISTINCT [Scratchpad1].EmployeeNumber, [ScratchPad1].Day,case when [OnTime1]>=225 and [OnTime1] <450 THEN [OnTime1]+15 ELSE [OnTime1]+30 end AS Breaks,Sum([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaks] AS dif INTO Scratchpad2FROM Scratchpad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, case when [OnTime1]>=225 And [OnTime1]<450Then [OnTime1]+15Else [OnTime1]+30 [Scratchpad1].LoginHAVING (((Sum([1_1ScratchPad].OnTime1))>=225));I know that the syntax for the sum is incorrect and I have yet to find an equivalent for "having," but all else is good. Would the best choice to replace "Having" be grouped?Thank youDoug |
|
|
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-09-30 : 14:18:35
|
Jl,Sorry ... evidently I left a few things out of my query:Here is the query as I got it :SELECT DISTINCT [Scratchpad1].Employee_Number, IIf([dif]<0,[Break]+[dif],[Break]) AS Paid, [ScratchPad1].name, [ScratchPad1].Date, [ScratchPad1].Day, IIf([OnTime1]>=225 And [OnTime1]<450,[OnTime1]+15,[OnTime1]+30) AS Break, Sum([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Break] AS dif INTO Scratchpad2FROM ScratchPad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, IIf([OnTime1]>=225 And [OnTime1]<450,[OnTime1]+15,[OnTime1]+30), [ScratchPad1].LogInHAVING (((Sum([1_1ScratchPad].OnTime1))>=225));Here is how I've corrected it thus far:SELECT DISTINCT [Scratchpad1].EmployeeNumber, case when [dif]<0 and [Break]+[dif] [Breaktime] AS Paid[ScratchPad1].Date,[ScratchPad1].Day,case when [OnTime1]>=225 and [OnTime1] <450 THEN [OnTime1]+15 ELSE [OnTime1]+30 end AS [Breaktime],Sum ([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaktime] AS dif INTO Scratchpad2FROM Scratchpad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, case when [OnTime1]>=225 And [OnTime1]<450Then [OnTime1]+15Else [OnTime1]+30 EndBut here's where the issues are Here:[Scratchpad1].EmployeeNumber, case when [dif]<0 and [Break]+[dif] [Breaktime] AS Paidand here:HAVING (((Sum([1_1ScratchPad].OnTime1))>=225));Any help is appreciated.ThanksDoug |
|
|
jleitao
Posting Yak Master
100 Posts |
Posted - 2010-09-30 : 19:28:12
|
Hi again,the CASE sintax is:CASE WHEN <Condition1> THEN <ACTION if condition1 is true> WHEN <Condition2> THEN <ACTION if condition2 is true> WHEN .... ELSE <Action if all the previous condition are false>END AS <COLUMN ALIAS>so you need change your code to:[Scratchpad1].EmployeeNumber, CASE WHEN [dif]<0 THEN [Break]+[dif] ELSE [Breaktime] END AS Paidhope this help.jleitao |
|
|
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-10-01 : 10:59:08
|
JL,I have this now SELECT DISTINCT [Scratchpad1].EmployeeNumber, case when [dif]<0 then [Break]+[dif]else [Breaktime]END AS [Paid],[ScratchPad1].Date,[ScratchPad1].Day,case when [OnTime1]>=225 then [OnTime1]<450 THEN [OnTime1]+15 ELSE [OnTime1]+30 AS [Breaktime],Sum ([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaktime] AS dif INTO Scratchpad2FROM Scratchpad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, case when [OnTime1]>=225 And [OnTime1]<450Then [OnTime1]+15Else [OnTime1]+30 Endand I'm getting the following error:Server: Msg 170, Level 15, State 1, Line 6Line 6: Incorrect syntax near '<'.and I'm not seeing what the issue is with the syntax of the query, because I didn't change this from when I was working on it yesterday with you advice. I'm sure it's something simple I'm not seeing. Your help is appreciated.ThanksDoug |
|
|
jleitao
Posting Yak Master
100 Posts |
Posted - 2010-10-01 : 11:16:18
|
change your second case by:case when [OnTime1]>=225 and [OnTime1] <450 THEN [OnTime1]+15 ELSE [OnTime1]+30 end AS [Breaktime],You have a "then" in the midle of the condition. |
|
|
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-10-01 : 11:37:06
|
Jl what about this having statement:HAVING (((Format$((([Timestamp]-(([LoggedIn]/1000)/60))/1440)+1,"yy/mm/dd")) Between [Start (YY/MM/DD)] And [End (YY/MM/DD)]));Is that better as a group by? |
|
|
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-10-01 : 11:49:22
|
Oh and when I'm running this query I get the following error:Server: Msg 207, Level 16, State 3, Line 1Invalid column name 'Breaktime'.but I thought thiscase when [OnTime1]>=225 then [OnTime1]<450 THEN [OnTime1]+15 ELSE [OnTime1]+30 AS [Breaktime],is creating a column named breaktime. Am I wrong? |
|
|
jleitao
Posting Yak Master
100 Posts |
Posted - 2010-10-01 : 12:40:13
|
I don't understand what you need in the having statement. having works as the same way as WHERE statement.Can you explain a little more your question?About the [Breaktime] column, he doesn't exist in the Scratchpad1 table. You just can use table columns in your SQL command. You are creating the column but you cant use it cause it doesn't exist yet.Your query should be:SELECT DISTINCT [Scratchpad1].EmployeeNumber, case when [dif]<0 then [Break]+[dif]else (case when [OnTime1]>=225 AND [OnTime1]<450 THEN [OnTime1]+15 ELSE [OnTime1]+30 END)END AS [Paid],[ScratchPad1].Date,[ScratchPad1].Day,case when [OnTime1]>=225 AND [OnTime1]<450 THEN [OnTime1]+15 ELSE [OnTime1]+30 END AS [Breaktime],Sum ([ScratchPad1... |
|
|
dougancil
Posting Yak Master
217 Posts |
Posted - 2010-10-01 : 13:40:20
|
JL,With that said, should the where go before or after the End Statement in the query?Like this:SELECT DISTINCT [Scratchpad1].EmployeeNumber, case when [dif]<0 then [Breaktime]+[dif]else(case when [OnTime1]>=225 AND [OnTime1]<450 THEN [OnTime1]+15 ELSE [OnTime1]+30 END)END AS [Paid],[ScratchPad1].Date,[ScratchPad1].Day,case when [OnTime1]>=225 and [OnTime1]<450 THEN [OnTime1]+15 ELSE [OnTime1]+30 endAS [Breaktime],Sum ([ScratchPad1].OnTime1) AS SumOfOnTime1, [ScratchPad1].LogIn, [LogIn]-[Breaktime] AS dif INTO Scratchpad2FROM Scratchpad1GROUP BY [ScratchPad1].EmployeeNumber, [ScratchPad1].Name, [ScratchPad1].Date, [ScratchPad1].Day, case when [OnTime1]>=225 And [OnTime1]<450Then [OnTime1]+15Else [OnTime1]+30 Where (((Sum([ScratchPad1].OnTime1))>=225));Endor after the end? Also when trying to run the query with the where statement, it's telling me this:Server: Msg 156, Level 15, State 1, Line 49Incorrect syntax near the keyword 'Where'.Server: Msg 170, Level 15, State 1, Line 49Line 49: Incorrect syntax near 'Sum'. |
|
|
|
|
|
|
|