Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Help with NULL values and how to write in a subquery

Posted on 2013-01-24
10
Medium Priority
?
355 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
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
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

Ask an Anonymous Question!

Don't feel intimidated by what you don't know. Ask your question anonymously. It's easy! Learn more and upgrade.

Question has a verified solution.

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

INTRODUCTION: While tying your database objects into builds and your enterprise source control system takes a third-party product (like Visual Studio Database Edition or Red-Gate's SQL Source Control), you can achieve some protection using a sing…
In this article I will describe the Copy Database Wizard method as one possible migration process and I will add the extra tasks needed for an upgrade when and where is applied so it will cover all.
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…

618 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