?
Solved

Help with NULL values and how to write in a subquery

Posted on 2013-01-24
10
Medium Priority
?
353 Views
Last Modified: 2013-01-24
select 'Linea 101' as 'Line',
Total_Qty as 'Total',
round((Progress_Qty * 100)/Total_Qty,0) as 'progress'
from Lenovo_Events
Join Lenovo_Lines on Lenovo_Events.Line_Key = Lenovo_Lines.Line_Key
where CONVERT(VARCHAR(8),Event_Date, 1)  = CONVERT(VARCHAR(8), GETDATE(), 1) 
and shift_key = 4
and Lenovo_Events.line_key =1
union all
select 'Linea 102' as 'Line',
Total_Qty as 'Total',
round((Progress_Qty * 100)/Total_Qty,0) as 'progress'
from Lenovo_Events
Join Lenovo_Lines on Lenovo_Events.Line_Key = Lenovo_Lines.Line_Key
where CONVERT(VARCHAR(8),Event_Date, 1)  = CONVERT(VARCHAR(8), GETDATE(), 1) 
and shift_key = 4
and Lenovo_Events.line_key =2
union all
select Lenovo_Lines.Line as 'Line',
Total_Qty as 'Total',
round((Progress_Qty * 100)/Total_Qty,0) as 'progress'
from Lenovo_Events
Join Lenovo_Lines on Lenovo_Events.Line_Key = Lenovo_Lines.Line_Key
where CONVERT(VARCHAR(8),Event_Date, 1)  = CONVERT(VARCHAR(8), GETDATE(), 1) 
and shift_key = 4
and Lenovo_Events.line_key =3
union all
select Lenovo_Lines.Line as 'Line',
Total_Qty as 'Total',
round((Progress_Qty * 100)/Total_Qty,0) as 'progress'
from Lenovo_Events
Join Lenovo_Lines on Lenovo_Events.Line_Key = Lenovo_Lines.Line_Key
where CONVERT(VARCHAR(8),Event_Date, 1)  = CONVERT(VARCHAR(8), GETDATE(), 1) 
and shift_key = 4
and Lenovo_Events.line_key =4

Open in new window


This returns:

Linea 101            22      50
Linea 102            23      39
Linea 103            67      2

As you can see the Last select did not write a row because there are no values for progress_Qty and Total_Qty.I do, however want to still write this row as:

Linea 104       0        0

Secondly, how can I rewirte the query as a subquery where the and shift_key = 4
only needs to be written once? I want to pass this a query parametere in my application. Thanks!
0
Comment
Question by:JessyRobinson1234
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 4
10 Comments
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 38813904
as we don't know which fields/rows are in which table, I will do a "educated guess", and suggest this code, which should do for both parts of the question:
* the LEFT JOIN to make sure you get rows  ...
* the simplifying of the query
select  'Line ' + cast(Lenovo_Events.line_key  as varchar(10))  as [Line],
max (Total_Qty) as 'Total',
max( round((Progress_Qty * 100)/Total_Qty,0)) as [progress]
from Lenovo_Events
LEFT Join Lenovo_Lines on Lenovo_Events.Line_Key = Lenovo_Lines.Line_Key
where CONVERT(VARCHAR(8),Event_Date, 1)  = CONVERT(VARCHAR(8), GETDATE(), 1) 
and shift_key = 4
group by Lenovo_Events.line_key

Open in new window

0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 38813906
of course, if you don't want NULL but 0:

ISNULL ( <expression>, 0 )

to change that.
0
 

Author Comment

by:JessyRobinson1234
ID: 38813979
HI Angelll,

First of all thank you for your quick response. Based on what's currently stored in Lenovo_Events ,I believe I am approaching it the wrong way. The third way indicates the Line_Key (6,1,2,5,3) so there is no 4 key record. however, i still want that line listed with 0 values. How can I do that?

16      1/24/2013 12:00:00 AM      6      4      1      1      False
17      1/24/2013 12:00:00 AM      1      4      22      11      False
18      1/24/2013 12:00:00 AM      2      4      23      9      False
19      1/24/2013 12:00:00 AM      5      4      55      8      False
20      1/24/2013 12:00:00 AM      3      4      67      2      False
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 38813986
do you have soem tabke which IS listing all the possible key values?
you may create such a table, if not yet presend, and left join from that table.

now, what is the table "lines" containaing" ?
why do you join that table?
your sample data is "incomplete", as it doesn't tell us the column names...
0
 

Author Comment

by:JessyRobinson1234
ID: 38814014
I have a table called Lenovo_Lines that has all 8 Lines

Lenovo_Lines table
My Lenovo_Events looks like this:

Lenovo_Events table
As you can see on these images I have nothing displayed in Lenovo_Events on today's date for Line_Key 4.

I hope this clarifies it a  bit.
0
 
LVL 143

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 38814098
that makes it as simple as this:
select l.line_key  as [Line],
isnull(e.Total_Qty, 0) as 'Total',
isnull ( round(( e.Progress_Qty * 100)/e.Total_Qty,0)), 0) as [progress]
from Lenovo_Lines l
LEFT Join Lenovo_Events e 
    ON  e.Line_Key = l.Line_Key
  AND e.Event_Date >= CONVERT(datetime, CONVERT(VARCHAR(10), GETDATE(), 120) , 120)
  AND e.Event_Date < CONVERT(datetime, CONVERT(VARCHAR(10), GETDATE() + 1, 120) , 120)

Open in new window

0
 

Author Comment

by:JessyRobinson1234
ID: 38814126
Thank you again, I get this error when I execute your code:

The isnull function requires 2 argument(s).
0
 
LVL 143

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 2000 total points
ID: 38814136
sorry, a ")" too much
select l.line_key  as [Line],
isnull(e.Total_Qty, 0) as 'Total',
isnull ( round(( e.Progress_Qty * 100)/e.Total_Qty,0), 0) as [progress]
from Lenovo_Lines l
LEFT Join Lenovo_Events e 
    ON  e.Line_Key = l.Line_Key
  AND e.Event_Date >= CONVERT(datetime, CONVERT(VARCHAR(10), GETDATE(), 120) , 120)
  AND e.Event_Date < CONVERT(datetime, CONVERT(VARCHAR(10), GETDATE() + 1, 120) , 120)

Open in new window

0
 

Author Closing Comment

by:JessyRobinson1234
ID: 38814147
That does the trick, THANK YOU VERY MUCH!
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

1.0 - Introduction Converting Visual Basic 6.0 (VB6) to Visual Basic 2008+ (VB.NET). If ever there was a subject full of murkiness and bad decisions, it is this one!   The first problem seems to be that people considering this task of converting…
In SQL Server, when rows are selected from a table, does it retrieve data in the order in which it is inserted?  Many believe this is the case. Let us try to examine for ourselves with an example. To get started, use the following script, wh…
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
In this video, Percona Solution Engineer Dimitri Vanoverbeke discusses why you want to use at least three nodes in a database cluster. To discuss how Percona Consulting can help with your design and architecture needs for your database and infras…
Suggested Courses

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question