SQL Query Help

I'm  hoping to get some help on a query that is more complex than my limited SQL Query knowledge.

We have an accounting system that I need to extract data from and as the fields containing the data I need are user defined fields, there is not a stock report/query for this.  The vendor has a hefty minimum fee charge for any custom query work, so I'm hoping to get it done myself.

SELECT

      VEN.Code AS Vend_Code,
      
      UDT.Label AS Ins_Type,
      
      CONVERT(varchar, UDE.Entry_Date, 01) AS Exp_Date, 
      
      VEN.Name as Vendor_Name,

      (SELECT UDE.Entry_Character WHERE (UDE.Data_Type = 'CHAR30' AND UDE.User_Defined_Type_Serial = 3)) AS Notes_1,

      (SELECT UDE.Entry_Character WHERE (UDE.Data_Type = 'CHAR30' AND UDE.User_Defined_Type_Serial = 4)) AS Notes_2,

      (SELECT UDE.Entry_Character WHERE (UDE.Data_Type = 'CHAR30' AND UDE.User_Defined_Type_Serial = 5)) AS Notes_3
      

FROM [VENDOR] VEN


LEFT OUTER JOIN Address_Translation ATX_US ON

      ATX_US.Entity_Type = 'V' 


JOIN User_Defined_Entry UDE ON

	ATX_US.Entity_Code = UDE.Entity_Code AND

      	ATX_US.Entity_Code = VEN.Code

	
JOIN User_Defined_Type UDT ON

	UDE.User_Defined_Type_Serial = UDT.Serial


WHERE UDE.Data_Type = 'DATE'

	AND (Label = 'GL Expire' OR Label = 'AL Expire' OR Label = 'WC Expire') 
	
	AND Entry_Date < current_timestamp	 

ORDER BY UDE.Entry_Date;

Open in new window


I've also attached a Word doc that contains:
- Screen print of the desired output
- Screen print with structure of the tables I'm working with
- The Query posted above (the highlighted statements are my incorrect attempts)
- Description using screen prints of what I am trying to accomplish

What I am trying to accomplish - see attached for more details.
For all Vendors (Vend_Code) in first query, I would like to display the Entry Character (Notes for that Vendor).
So, for Vendor #6059, I would like to display the
•      1st Entry_Character as Notes 1,
•      2nd Entry_Character as Notes 2
•      3rd Entry_Character as Notes 3
Where now the query is pulling in null values.

I hope this makes sense.

Thanks in advance for any help.    I really appreciate it!
SQL-Query-Help-Post.doc
tempadminAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Chris__WCommented:
Hello,

Your joins look a little off, though they may be functioning.  The usual way to write them would be tbl1 LEFT OUTER JOIN tbl2 ON tbl1.f1 = tbl2.f1 _____ JOIN tbl3 ON tbl1(2).f1 = tbl3.f1 [and so on].  The ON statement after joining the first 2 tables does not provide any criteria on how to join the tables (just a filter on the first table).  The code below simply moves it to the appropriate location.

Also, the second and third JOINS do not have a specified type (LEFT, RIGHT, INNER, FULL, etc.).  I cannot tell from the code above which you are intending to use, but either way I'd reccomend that you specify the type of join you want.  If the join is not the intended type, you'll not get the results you are expecting.

SELECT

      VEN.Code AS Vend_Code,
      
      UDT.Label AS Ins_Type,
      
      CONVERT(varchar, UDE.Entry_Date, 01) AS Exp_Date, 
      
      VEN.Name as Vendor_Name,

      (SELECT UDE.Entry_Character WHERE (UDE.Data_Type = 'CHAR30' AND UDE.User_Defined_Type_Serial = 3)) AS Notes_1,

      (SELECT UDE.Entry_Character WHERE (UDE.Data_Type = 'CHAR30' AND UDE.User_Defined_Type_Serial = 4)) AS Notes_2,

      (SELECT UDE.Entry_Character WHERE (UDE.Data_Type = 'CHAR30' AND UDE.User_Defined_Type_Serial = 5)) AS Notes_3
      

FROM [VENDOR] VEN


LEFT OUTER JOIN Address_Translation ATX_US ON

      ATX_US.Entity_Type = 'V' AND ATX_US.Entity_Code = VEN.Code

JOIN User_Defined_Entry UDE ON

	ATX_US.Entity_Code = UDE.Entity_Code

JOIN User_Defined_Type UDT ON

	UDE.User_Defined_Type_Serial = UDT.Serial


WHERE UDE.Data_Type = 'DATE'

	AND (Label = 'GL Expire' OR Label = 'AL Expire' OR Label = 'WC Expire') 
	
	AND Entry_Date < current_timestamp	 

ORDER BY UDE.Entry_Date;

Open in new window


When you say the query is pulling Null values, is the whole returned dataset a null, or just those individual fields?

Thanks,
Chris
Anthony PerkinsCommented:
I would do it like this:
SELECT  VEN.Code AS Vend_Code,
        UDT.Label AS Ins_Type,
        CONVERT(varchar, UDE.Entry_Date, 01) AS Exp_Date,
        VEN.Name AS Vendor_Name,
        n1.Entry_Character Notes_1,
        n2.Entry_Character Notes_2,
        n3.Entry_Character Notes_3
FROM    [VENDOR] VEN
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
							-- INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial  No need
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire',
                                              'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 3
                  ) n1 ON VEN.Code = n1.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
							-- INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial  No need
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire',
                                              'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 4
                  ) n2 ON VEN.Code = n2.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
							-- INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial  No need
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire',
                                              'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 5
                  ) n3 ON VEN.Code = n3.Entity_Code
ORDER BY UDE.Entry_Date ;

Open in new window


Of course you can rap those derived tables into a VIEW  (or even a UDF) to make them easier to read.  Let me know if you need help with that.
Anthony PerkinsCommented:
This is what it would look like with a VIEW.

First create the VIEW:
CREATE VIEW vw_GetNotes
AS
SELECT  ATX_US.Entity_Code,
        UDE.Entry_Character,
        UDE.User_Defined_Type_Serial
FROM    Address_Translation ATX_US
        INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
						-- INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial  No need
WHERE   ATX_US.Entity_Type = 'V'
        AND UDE.Data_Type IN ('DATE', 'CHAR30')
        AND UDE.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
        AND UDE.Entry_Date < CURRENT_TIMESTAMP;
GO

Open in new window


Your SELECT statement becomes very simple:
SELECT  VEN.Code AS Vend_Code,
        UDT.Label AS Ins_Type,
        CONVERT(varchar, UDE.Entry_Date, 01) AS Exp_Date,
        VEN.Name AS Vendor_Name,
        n1.Entry_Character Notes_1,
        n2.Entry_Character Notes_2,
        n3.Entry_Character Notes_3
FROM    [VENDOR] VEN
        LEFT JOIN vw_GetNotes n1 ON VEN.Code = n1.Entity_Code AND n1.User_Defined_Type_Serial = 3
        LEFT JOIN vw_GetNotes n2 ON VEN.Code = n2.Entity_Code AND n2.User_Defined_Type_Serial = 4
        LEFT JOIN vw_GetNotes n3 ON VEN.Code = n3.Entity_Code AND n3.User_Defined_Type_Serial = 5
ORDER BY UDE.Entry_Date ;

Open in new window

Protecting & Securing Your Critical Data

Considering 93 percent of companies file for bankruptcy within 12 months of a disaster that blocked access to their data for 10 days or more, planning for the worst is just smart business. Learn how Acronis Backup integrates security at every stage

tempadminAuthor Commented:
Thanks so much for taking the time to respond and for the detailed responses.

Chris - I'm getting null values just on those three fields (Notes 1, Notes 2 and Notes 3)

acperkins - very new to SQL...never heard of creating views, but looks like a great tool and i will definitely take the time to learn more about.....

I tried the first solution you posted without the views, and get the error:

Invalid column name 'Label'.

In the Select statement, the Label field is correctly identified as being in the User_Defined_Type table (UDT.Label), but in the joins, it's listed as UDE.Label

I changed the 3 instances of UDE.Label to UDT.Label and get this error:

The multi-part identifier "UDT.Label" could not be bound.

Any additional help would really be appreciated
Anthony PerkinsCommented:
I see the problem.  Just not sure how to solve it.  It has to do with the User_Defined_Type table I commented out.  Here is the question for you:
The User_Defined_Type table is related to the User_Defined_Entry table.  That means that there could potentially be a different label for each row in User_Defined_Entry, depending if User_Defined_Type_Serial = 3, 4 or 5.  So let me suggest a couple of solutions:
1. A Label for every entry.
SELECT  VEN.Code AS Vend_Code,
        n1.Label AS Ins_Type1,
        n2.Label AS Ins_Type2,
        n3.Label AS Ins_Type3,
        CONVERT(varchar, UDE.Entry_Date, 01) AS Exp_Date,
        VEN.Name AS Vendor_Name,
        n1.Entry_Character Notes_1,
        n2.Entry_Character Notes_2,
        n3.Entry_Character Notes_3
FROM    [VENDOR] VEN
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 3
                  ) n1 ON VEN.Code = n1.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 4
                  ) n2 ON VEN.Code = n2.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 5
                  ) n3 ON VEN.Code = n3.Entity_Code
ORDER BY UDE.Entry_Date ;

Open in new window


2. The labels are repeated for all three entries (in other words User_Defined_Type_Serial is the same for all three rows), so just pick the first one (you can optionally drop the Label from the SELECT and JOIN to User_Defined_Type in the second and third derived table)  :

SELECT  VEN.Code AS Vend_Code,
        n1.Label AS Ins_Type,
        CONVERT(varchar, UDE.Entry_Date, 01) AS Exp_Date,
        VEN.Name AS Vendor_Name,
        n1.Entry_Character Notes_1,
        n2.Entry_Character Notes_2,
        n3.Entry_Character Notes_3
FROM    [VENDOR] VEN
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 3
                  ) n1 ON VEN.Code = n1.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 4
                  ) n2 ON VEN.Code = n2.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDE.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 5
                  ) n3 ON VEN.Code = n3.Entity_Code
ORDER BY UDE.Entry_Date ;

Open in new window

tempadminAuthor Commented:
Okay, progress.    I tried both options, and for both I get the error:

The multi-part identifier "UDE.Entry_Date" could not be bound.

SELECT  VEN.Code AS Vend_Code,
        n1.Label AS Ins_Type,
        CONVERT(varchar, UDE.Entry_Date, 01) AS Exp_Date,
        VEN.Name AS Vendor_Name,
        n1.Entry_Character Notes_1,
        n2.Entry_Character Notes_2,
        n3.Entry_Character Notes_3
FROM    [VENDOR] VEN
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDT.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 3
                  ) n1 ON VEN.Code = n1.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDT.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 4
                  ) n2 ON VEN.Code = n2.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDT.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 5
                  ) n3 ON VEN.Code = n3.Entity_Code
ORDER BY UDE.Entry_Date ;

Open in new window


Getting close to giving up and resorting to manipulating an excel spreadsheet the system will generate with all of the data I need, but I do appreciate the help.

At least I learned something in the process:
1)  This is not the easiest query, even for those much more experienced
2)  Introduction to views - which seems like a good tool to learn

If you think you might have a resolution, I'm willing to try.

If not, no worries.  I will check back and award points anyway because I really appreciate the help and effort

Thanks!
Anthony PerkinsCommented:
This is not the easiest query, even for those much more experienced
It is not difficult.  Unfortunately, I did not create the tables, hence the errors.

Here is the question for you:
I never did get an answer on this, so I am assuming that you are going with option 2.

The same is true for the EntryDate.  There is one per label.  If you cannot figure it out, I will post a solution tonight.
Anthony PerkinsCommented:
On second thoughts it looks like you are going for the first option.  Just picking the label from the row with User_Defined_Type_Serial = 3, the problem with that approach is that if that condition is not matched there will be no entry.  If you only want one out of three than I suggest you use the COALESCE function to pick the first one available as in:
SELECT  VEN.Code AS Vend_Code,
        COALESCE(n1.Label, n2.Label, n3.Label) Ins_Type,
        COALESCE(n1.Exp_date, n2.Exp_date, n3.Exp_date) Ins_Type,
        VEN.Name AS Vendor_Name,
        n1.Entry_Character Notes_1,
        n2.Entry_Character Notes_2,
        n3.Entry_Character Notes_3
FROM    [VENDOR] VEN
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            CONVERT(varchar(10), UDE.Entry_Date, 1) AS Exp_Date,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDT.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 3
                  ) n1 ON VEN.Code = n1.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            CONVERT(varchar(10), UDE.Entry_Date, 1) AS Exp_Date,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDT.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 4
                  ) n2 ON VEN.Code = n2.Entity_Code
        LEFT JOIN (SELECT   ATX_US.Entity_Code,
                            UDE.Entry_Character,
                            CONVERT(varchar(10), UDE.Entry_Date, 1) AS Exp_Date,
                            UDT.Label
                   FROM     Address_Translation ATX_US
                            INNER JOIN User_Defined_Entry UDE ON ATX_US.Entity_Code = UDE.Entity_Code
                            INNER JOIN User_Defined_Type UDT ON UDE.User_Defined_Type_Serial = UDT.Serial
                   WHERE    ATX_US.Entity_Type = 'V'
                            AND UDE.Data_Type IN ('DATE', 'CHAR30')
                            AND UDT.Label IN ('GL Expire', 'AL Expire', 'WC Expire')
                            AND UDE.Entry_Date < CURRENT_TIMESTAMP
                            AND UDE.User_Defined_Type_Serial = 5
                  ) n3 ON VEN.Code = n3.Entity_Code
ORDER BY UDE.Entry_Date ;

Open in new window

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
Anthony PerkinsCommented:
"B" grade?  Did you want me to go over there and type it in for you?
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Query Syntax

From novice to tech pro — start learning today.